【问题描述】
给出一个共N项的数列a1,a2,a3,…,an,然后给出Q组询问(Li,Ri),对于每一组询问回答区间[aLi,aRi]中的元素是否互不相同。
【输入】
第1 行,2 个整数N,Q。
第2行,N个整数a1,a2,a3,…,an
接下来Q行,每行2个整数Li,Ri。
【输出】
对于每组询问输出一行,“Yes”或“No”。
【输入输出样例1】
search.in | search.out |
4 2 1 2 3 2 1 3 2 4 | Yes No |
【数据说明】
对于50% 的数据,1≤N.Q≤10^3;
对于100% 的数据,1≤N,Q≤10^5,1≤ai≤10^5,1≤Li≤Ri≤10^5。
#include<bits/stdc++.h>
using namespace std;
const int maxn=100000+20;
int a[maxn],h[maxn],p[maxn],maxl[maxn];
int main(){
freopen("search.in","r",stdin);
freopen("search.out","w",stdout);
ios::sync_with_stdio(false);
int N,Q,i,l,r;
cin>>N>>Q;
for(i=1;i<=N;i++){
cin>>a[i];
p[i]=h[a[i]];
h[a[i]]=i;
}
for(i=1;i<=N;i++)maxl[i]=max(maxl[i-1],p[i]);
while(Q--){
cin>>l>>r;
if(maxl[r]<l)cout<<"Yes"<<endl;
else cout<<"No"<<endl;
}
return 0;
}