#include #define LIM 60000 using namespace std; int segtree[2][4*LIM],lazy[2][4*LIM]; void push(int ind,int node,int s,int e) { if(lazy[ind][node]) { segtree[ind][node]+=lazy[ind][node]; if(s!=e) { lazy[ind][2*node]+=lazy[ind][node]; lazy[ind][2*node+1]+=lazy[ind][node]; } lazy[ind][node]=0; } } void update1(int ind,int node,int st,int en,int a,int b) { push(ind,node,st,en); if(ben||b=en) { lazy[ind][node]=1; push(ind,node,st,en); return ; } int mid=(st+en)/2; update1(ind,node*2,st,mid,a,b); update1(ind,node*2+1,mid+1,en,a,b); segtree[ind][node]=max(segtree[ind][2*node],segtree[ind][2*node+1]); } void update2(int ind,int node,int st,int en,int in,int val) { push(ind,node,st,en); if(inen) return ; if(st==en) { segtree[ind][node]=val; return ; } int mid=(st+en)/2; update2(ind,node*2,st,mid,in,val); update2(ind,node*2+1,mid+1,en,in,val); segtree[ind][node]=max(segtree[ind][2*node],segtree[ind][2*node+1]); } int query(int ind,int node,int st,int en,int a,int b) { push(ind,node,st,en); if(ben||b=en) return segtree[ind][node]; int mid=(st+en)/2; return max(query(ind,2*node,st,mid,a,b),query(ind,2*node+1,mid+1,en,a,b)); } vector minimumZooNumbers(int n, int m, vector t, vector s, vector d) { int i,dp[LIM]={0},j; vectorans(m); vectorv1[LIM],v2[LIM]; for(i=0;id[i]) continue; if(t[i]=='E'||t[i]=='C') v1[d[i]].push_back(s[i]); else v2[d[i]].push_back(s[i]); } for(i=1;i<=n;i++) { dp[i]=dp[i-1]; for(j=0;j=0;i--) ans[i]=min(ans[i],ans[i+1]); for(i=0;i> cases; for(int a0 = 0; a0 < cases; a0++){ int m; int n; cin >> m >> n; vector t(n); for(int t_i = 0; t_i < n; t_i++){ cin >> t[t_i]; } vector s(n); for(int s_i = 0; s_i < n; s_i++){ cin >> s[s_i]; } vector d(n); for(int d_i = 0; d_i < n; d_i++){ cin >> d[d_i]; } vector result = minimumZooNumbers(m, n, t, s, d); for (ssize_t i = 0; i < result.size(); i++) { cout << result[i] << (i != result.size() - 1 ? " " : ""); } cout << endl; } return 0; }