#include using namespace std; const int N = 5e4 + 10; const char loai[] = {'E','D','C','M'}; int test,n,m; struct ds { int l,r,type; }a[N]; int it[4][N * 4],res[N]; void nhap() { scanf("%d\n",&test); } int get(char c) { for (int i = 0; i < 4; i++) { if (c == loai[i]) { return i; } } } bool cmp(ds a,ds b) { return (a.r < b.r) || (a.r == b.r && a.l < b.l); } void nhapdulieu() { scanf("%d %d\n",&n,&m); for (int i = 1; i <= m; i++) { char c; scanf("%c ",&c); a[i].type = get(c); // cout<> 1; build(i << 1,l,mid,loai); build(i << 1 | 1,mid + 1,r,loai); } void update(int i,int l,int r,int u,int loai,int gt) { if (l > u || r < u) { return; } //it[loai][i] = max(it[loai][i],gt); if (l == r) { it[loai][i] = max(it[loai][i],gt); return; } int mid = (l + r) >> 1; update(i << 1,l,mid,u,loai,gt); update(i << 1 | 1,mid + 1,r,u,loai,gt); it[loai][i] = max(it[loai][i << 1],it[loai][i << 1 | 1]); } int get(int i,int l,int r,int u,int v,int loai) { if (l > v || r < u) {return 0;} if (l >= u && r <= v) { return it[loai][i]; } int mid = (l + r) >> 1; int left = get(i << 1,l,mid,u,v,loai); int right = get(i << 1 | 1,mid + 1,r,u,v,loai); return max(left,right); } bool check(const int i,const int j) { if ((i + 1) % 4 == j) {return false;} if ((j + 1) % 4 == i) {return false;} return true; } void giai() { for (int i = 0; i < 4; i++) { build(1,1,n,i); } //cout<