Sereja and Suffixes

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 }
View Code
原文地址:https://www.cnblogs.com/chujian123/p/3892255.html