#include #include #include using namespace std; #define fst first #define snd second typedef pair pii; const int MaxN=50001; //DP (x,i) [0,x)anyType+[x,inf)Typei struct node{ int L,m,l; };//L(azy), m(ax), l(eaf) int dp[MaxN],A,B,N,V; node ST[MaxN*4][2]; void push(int n,int t){ if(!ST[n][t].L)return; ST[n][t].m+=ST[n][t].L; if(!ST[n][t].l){ ST[2*n][t].L+=ST[n][t].L; ST[2*n+1][t].L+=ST[n][t].L; } ST[n][t].L=0; } void placeVal(int v,int n,int t){ ST[n][t].m=max(ST[n][t].m,v); ST[n][t].L=0; ST[n][t].l=1; } void upd(int x,int y,int n,int t){ push(n,t); if(A<=x&&y<=B){ ST[n][t].L+=V; push(n,t); return; } if(y<=A||B<=x)return; upd(x,(x+y)/2,2*n,t); upd((x+y)/2,y,2*n+1,t); ST[n][t].m=max(ST[2*n][t].m,ST[2*n+1][t].m); } void upd1(int x,int y,int n){ push(n,0);push(n,1); if(A starts[MaxN];//starts[y]={(x,t)|(x,y)of type t exist} int main() { cin.tie(0),ios_base::sync_with_stdio(0); int M,T,t,i,j,p,q; char animal; cin>>T; for(t=0;t>N>>M; init(1,N+1,1); for(i=0;i<=N;i++)starts[i].clear(),dp[i]=0; for(i=0;i>animal; type[i]=(animal=='E'||animal=='C'); } for(i=0;i>in[i]; for(i=0;i>fn[i]; for(i=0;i