#include #include #define maxn 50004 using namespace std; vector dest[maxn]; int arr[maxn]; char T[maxn]; int src[maxn]; int ans[maxn]; class segtree { vector tre; vector lazy; public: segtree(int n) { tre.resize(4*n+2); lazy.resize(4*n+2); build(1,n,1); } int quer() { return tre[1]; } void build(int i,int j,int p) { if(i==j) { tre[p]=0; lazy[p]=0; return; } int mid=(i+j)/2; build(i,mid,2*p); build(mid+1,j,2*p+1); tre[p]=max(tre[2*p],tre[2*p+1]); lazy[p]=0; } void upd(int i,int j,int p,int x,int y) { //cout<mid) { upd(mid+1,j,2*p+1,x,y); }else{ upd(i,mid,2*p,x,mid); upd(mid+1,j,2*p+1,mid+1,y); } tre[p]=max(tre[2*p],tre[2*p+1]); } void upd1(int i,int j,int p,int x) { if(i==j) { tre[p]=arr[i]; return; } int mid=(i+j)/2; if(lazy[p]) { lazy[2*p]+=lazy[p]; tre[2*p]+=lazy[p]; lazy[2*p+1]+=lazy[p]; tre[2*p+1]+=lazy[p]; lazy[p]=0; } if(x<=mid) { upd1(i,mid,2*p,x); }else { upd1(mid+1,j,2*p+1,x); } tre[p]=max(tre[2*p],tre[2*p+1]); } }; int main() { int t; cin>>t; while(t--) { int n,m; cin>>m>>n; for(int i=1;i<=n;i++) { cin>>T[i]; ans[i]=-1; } for(int i=0;i<=m;i++) { dest[i].clear(); } for(int i=1;i<=n;i++) { cin>>src[i]; } for(int i=1;i<=n;i++) { int a; cin>>a; if(a>src[i]) dest[a].push_back(i); } segtree Dog(m),Cat(m); // cout<<"^^"; arr[1]=0; for(int i=2;i<=m;i++) { //cout<<"\n"<0;i--) { if(ans[i]==-1) ans[i]=pr; else pr=ans[i]; } for(int i=1;i<=n;i++) { cout<