Codeforces Round #215 (Div. 2) -B. Sereja and Suffixes

来源:互联网 发布:烧脑电影推荐 知乎 编辑:程序博客网 时间:2024/05/21 18:35

题意: 统计数组中某个位置M后有多少个不同的数字。


方法: 哈希法,预处理数据。

#include <iostream>#include <cstdio>#include <cmath>#include <algorithm>#include <cstring>using namespace std;int a[100005],bi[100005];int c[100005];                 //存储统计的数组一开始没注意开太小,一直WA。应该是每个位置都要存储。int main(){    int n,m,i,j=0,l;    scanf("%d%d",&n,&m);    for(i=0;i<n;i++)    {        scanf("%d",&a[i]);    }    memset(bi,0,sizeof(bi));    int count=0;    for(i=n-1;i>=0;i--)    {       if(!bi[a[i]])          //哈希法,把数映射到一个表里       {            count++;            bi[a[i]]=1;        // 有数字的标记。       }       c[i]=count;     //从后面往前讲数据预处理,统计每个位置后面多少个不同的数字    }    while(m--)    {        scanf("%d",&l);        printf("%d\n",c[l-1]);    }}