#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
const int maxn = 200100;
int a[maxn],lim;
int lowbit(int x){
return x&-x;
}
int sum(int x){
int ret = 0;
while(x > 0){
ret += a[x]; x-=lowbit(x);
}
return ret;
}
void add(int x,int d){
while(x<=lim){
a[x]+=d; x+=lowbit(x);
}
}
int n,m,id[maxn],x;
int main()
{
int T;
scanf("%d",&T);
while(T--){
scanf("%d %d",&n,&m);
memset(a,0,sizeof(a));
lim = n+m;
for(int i=1;i<=n;i++){
id[i] = m+i;
add(id[i],1);
}
for(int i=1;i<=m;i++){
scanf("%d",&x);
if(i>1) printf(" ");
printf("%d",sum(id[x])-1);
add(id[x],-1);
id[x]=m-i+1;
add(id[x],1);
} printf("\n");
}
return 0;
}
UVA - 1513(树状数组优化)
最新推荐文章于 2017-08-18 17:48:33 发布