Codeforces Round #215 (Div. 2) B:http://codeforces.com/problemset/problem/368/B
题意:给你一个序列,然后查询i--n中没有重复元素的个数。
题解:从右到左递推一遍可以了,很简单的递推。
1 #include<iostream> 2 #include<cstdio> 3 #include<algorithm> 4 #include<cstring> 5 using namespace std; 6 const int N=1e5+10; 7 int n,t,m; 8 int a[N]; 9 int ans[N]; 10 bool visit[N]; 11 int main(){ 12 while(~scanf("%d%d",&n,&m)){ 13 memset(ans,0,sizeof(ans)); 14 memset(a,0,sizeof(a)); 15 memset(visit,0,sizeof(visit)); 16 for(int i=1;i<=n;i++){ 17 scanf("%d",&a[i]); 18 } 19 ans[n]=1; 20 visit[a[n]]=1; 21 for(int i=n-1;i>=1;i--){ 22 if(!visit[a[i]]){ 23 ans[i]=ans[i+1]+1; 24 visit[a[i]]=1; 25 } 26 else 27 ans[i]=ans[i+1]; 28 } 29 for(int i=1;i<=m;i++){ 30 scanf("%d",&t); 31 printf("%d ",ans[t]); 32 } 33 } 34 }