预处理一下就好了,一开始题目看不懂,怎么回事,做A,B的感觉太简单。C又太难T_T
#include<iostream>
#include<cstring>
using namespace std;
int n,m;
int a[100001];
int l[100001];
int flag[100001];
int diff;
int ans[100001];
int main(){
cin>>n>>m;
diff=0;
memset(flag,0,sizeof(flag));
for(int i=0;i<n;i++){
cin>>a[i];
if(!flag[a[i]])
diff++;
flag[a[i]]++;
}
for(int i=0;i<n;i++){
ans[i]=diff;
if(--flag[a[i]] == 0)
diff--;
}
for(int i=0;i<m;i++){
cin>>l[i];
cout<<ans[l[i]-1]<<endl;
}
return 0;
}