#include using namespace std; int d[100002]; struct mas{ int typ,l,r; bool operator <(mas a1){ return a1.l>l; } }; struct tre{ int val; int shep; tre *L; tre *R; tre(){ val=0; shep=0; L=NULL; R=NULL; } }; void shd(tre *&it){ if(it->L){ it->L->val+=it->shep; it->L->shep+=it->shep; } if(it->R){ it->R->val+=it->shep; it->R->shep+=it->shep; } it->shep=0; } void add(tre *&it,int l,int r,int lf,int rg){ if(!it) return; if(l>=rg || r<=lf) return; if(it->shep) shd(it); if(l>=lf && r<=rg) {it->val++;it->shep++;return;} add(it->L,l,(l+r)/2,lf,rg); add(it->R,(l+r)/2,r,lf,rg); it->val=max(it->L ? it->L->val : 0, it->R ? it->R->val : 0); } void upd(tre *&it,int l,int r,int idx,int val){ if(l>idx || r<=idx) return; if(!it) it=new tre(); if(it->shep) shd(it); it->val=max(it->val,val); if(l+1==r) return; upd(it->L,l,(l+r)/2,idx,val); upd(it->R,(l+r)/2,r,idx,val); } int mx(tre *&it,int l,int r,int lf,int rg){ if(!it) return 0; if(l>=rg || r<=lf) return 0; if(l>=lf && r<=rg) return it->val; if(it->shep) shd(it); int r1=mx(it->L,l,(l+r)/2,lf,rg); int r2=mx(it->R,(l+r)/2,r,lf,rg); return max(r1,r2); } void fnd(tre *&it,int l,int r){ if(!it) return; if(it->shep) shd(it); if(l+1==r){ d[l]=max(it->val,d[l]); return; } fnd(it->L,l,(l+r)/2); fnd(it->R,(l+r)/2,r); } vector minimumZooNumbers(int m, int n, vector t, vector s, vector e) { vector v; vector pas(n); for(int i=0;iv[i].r) continue; if(v[i].typ==0){ l=mx(root0,0,m+1,0,v[i].r+1); ll=mx(root1,0,m+1,0,v[i].l+1); //cout<=0;i--){ if(d[i]) { if(pas[d[i]-1]==-1 || pas[d[i]-1]>i)pas[d[i]-1]=i; } } int k=-1; for(int i=n-1;i>=0;i--){ if(pas[i]!=-1 && k==-1) k=pas[i]; if(pas[i]!=-1) k=min(k,pas[i]); pas[i]=k; } return pas; } int main() { int cases; cin >> 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; }