cf B. Sereja and Suffixes
http://codeforces.com/contest/368/problem/B
从后往前找一遍就可以。
1 #include <cstdio> 2 #include <cstring> 3 #include <algorithm> 4 #define maxn 200000 5 using namespace std; 6 7 int dp[maxn]; 8 int n,m; 9 int a[maxn]; 10 bool vis[maxn]; 11 12 int main() 13 { 14 while(scanf("%d%d",&n,&m)!=EOF) 15 { 16 memset(dp,0,sizeof(dp)); 17 memset(vis,false,sizeof(vis)); 18 int t1=0; 19 for(int i=1; i<=n; i++) 20 { 21 scanf("%d",&a[i]); 22 } 23 for(int i=n; i>=1; i--) 24 { 25 if(!vis[a[i]]) 26 { 27 vis[a[i]]=true; 28 t1++; 29 dp[i]=t1; 30 } 31 else 32 { 33 dp[i]=t1; 34 } 35 } 36 for(int i=1; i<=m; i++) 37 { 38 int x; 39 scanf("%d",&x); 40 printf("%d\n",dp[x]); 41 } 42 } 43 return 0; 44 }