区间查询

【问题描述】

给出一个共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;
}

猜你喜欢

转载自blog.csdn.net/MrTinTin/article/details/83098784