#include #include using namespace std; //FUCK.......MISSED AN EASY ONE ....SHITTT #define ll long long #define ll long long #define N (ll)50007 #define Z 70*N #define M 1000000000 #define pi pair #define F first #define S second #define pb push_back #define ld long double #define inf 10000000 #define pi2 pair #define pii pair #define bs 315 #define p1 10000000007 #define p2 998244353 //|| //"\n" //E,D,C,M map mp; vector v[N]; int s[N],d[N],ans[N][2],temp[N],out[N],tt[N][3]; int t[N]; int tree[4*N][3],lazy[4*N][3]; void f(ll nd,ll l,ll r,ll ind) { if(lazy[nd][ind]) { //update tree value tree[nd][ind]+=lazy[nd][ind]; if(l!=r) { lazy[2*nd][ind]+=lazy[nd][ind]; lazy[2*nd+1][ind]+=lazy[nd][ind]; //pass the value on to the children } lazy[nd][ind]=0; } } void up(ll nd,ll l,ll r,ll a,ll b,ll ind) {// f(nd,l,r,ind); if(l==a && r==b) { lazy[nd][ind]++; //update the lazy array return ; } ll mid=(l+r)/2; if(b<=mid) up(2*nd,l,mid,a,b,ind); else if(a>mid) up(2*nd+1,mid+1,r,a,b,ind); else { up(2*nd,l,mid,a,mid,ind); up(2*nd+1,mid+1,r,mid+1,b,ind); } f(2*nd,l,mid,ind); f(2*nd+1,mid+1,r,ind); tree[nd][ind]=max(tree[2*nd][ind],tree[2*nd+1][ind]); // combine }//Lazy update ll qy(ll nd,ll l,ll r,ll a,ll b,ll ind) { f(nd,l,r,ind); ll x1=0,x2=0,i; if(l==a && r==b) { // return tree[nd]; return tree[nd][ind]; } ll mid=(l+r)/2; if(b<=mid) x1= qy(2*nd,l,mid,a,b,ind); else if(a>mid) x1= qy(2*nd+1,mid+1,r,a,b,ind); else { x1=qy(2*nd,l,mid,a,mid,ind); x2=qy(2*nd+1,mid+1,r,mid+1,b,ind); } // combine f(2*nd,l,mid,ind); f(2*nd+1,mid+1,r,ind); tree[nd][ind]=max(tree[2*nd][ind],tree[2*nd+1][ind]); return max(x1,x2); } void up2(ll nd,ll l,ll r,ll pos,ll val,ll ind) {// f(nd,l,r,ind); // cout<mid) up2(2*nd+1,mid+1,r,pos,val,ind); //cout<>q; mp['E']=1; mp['D']=0; mp['C']=1; mp['M']=0; while(q--) { cin>>m>>n; memset(tree,0,sizeof(tree)); memset(lazy,0,sizeof(lazy)); for(i=0;i>c; t[i]=mp[c]; } for(i=1;i<=n;i++) { cin>>s[i]; } for(i=1;i<=n;i++) { cin>>d[i]; if(s[i]>d[i]) continue; v[d[i]].pb(i); } for(i=1;i<=m;i++) { for(j=0;j1) { for(j=0;j<2;j++) { ans[i][j]=qy(1,1,m,1,i-1,!j); up2(1,1,m,i,ans[i][j],j); //for(int k=1;k=1;i--) { out[i]=min(out[i],out[i+1]); } for(i=1;i<=n;i++) { if(out[i]==N) cout<<-1<<" "; else cout<