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 }
View Code

 

你可能感兴趣的:(FF)