1 #include<cstdio> 2 #include<cstring> 3 const int maxn=100000+5; 4 int sum[maxn<<4]; 5 int add[maxn<<4]; 6 int num_index[maxn]; 7 void push_up(int rt) 8 { 9 sum[rt]=sum[rt<<1]+sum[rt<<1|1]; 10 } 11 void push_down(int rt,int len) 12 { 13 if(add[rt]) 14 { 15 sum[rt<<1]=add[rt]*(len-len/2); 16 sum[rt<<1|1]=add[rt]*(len/2); 17 add[rt<<1]=add[rt<<1|1]=add[rt]; 18 add[rt]=0; 19 } 20 } 21 void update(int L,int R,int inc,int l,int r,int rt) 22 { 23 if(L<=l&&r<=R) 24 { 25 sum[rt]+=inc*(r-l+1); 26 add[rt]+=inc; 27 return ; 28 } 29 push_down(rt,r-l+1); 30 int m=(l+r)>>1; 31 if(L<=m) update(L,R,inc,l,m,rt<<1); 32 if(R>m) update(L,R,inc,m+1,r,rt<<1|1); 33 push_up(rt); 34 } 35 int query(int L,int R,int l,int r,int rt) 36 { 37 if(L<=l&&r<=R) 38 { 39 return sum[rt]; 40 } 41 push_down(rt,r-l+1); 42 int ret=0; 43 int m=(l+r)>>1; 44 if(l<=m) ret+=query(L,R,l,m,rt<<1); 45 if(R>m) ret+=query(L,R,m+1,r,rt<<1|1); 46 return ret; 47 } 48 int n,m; 49 int main() 50 { 51 int t; 52 scanf("%d",&t); 53 while(t--) 54 { 55 scanf("%d%d",&n,&m); 56 memset(sum,0,sizeof(sum)); 57 memset(add,0,sizeof(add)); 58 update(1+maxn,n+maxn,1,1,2*maxn-1,1); 59 int a; 60 for(int i=1;i<=n;i++) 61 num_index[i]=maxn+i; 62 int top=maxn; 63 for(int i=0;i<m;i++) 64 { 65 scanf("%d",&a); 66 printf("%d",query(1,num_index[a]-1,1,2*maxn-1,1)); 67 if(i!=m-1) printf(" "); 68 update(num_index[a],num_index[a],-1,1,2*maxn-1,1); 69 num_index[a]=top--; 70 update(num_index[a],num_index[a],1,1,2*maxn-1,1); 71 } 72 printf(" "); 73 } 74 return 0; 75 }