莫队TLE&RE
查看原帖
莫队TLE&RE
1772213
Ahler楼主2025/7/23 20:25

求调

#include<bits/stdc++.h>
using namespace std;
int len;
struct node{int id,l,r,val;}qs[100009];
int ar[100009];
bool cmp(node a,node b){
    if(a.l/len==b.l/len) return a.l<b.l;
    return a.l/len<b.l/len;
}
bool cmp1(node a,node b){
    return a.id<b.id;
}
int sum[10009];//sum[i]表示数字i出现次数
void add(int i){sum[i]++;}
void del(int i){sum[i]--;}
int main(){
    int n,q;
    cin >> n >> q;
    len=sqrt(n);
    for(int i=0;i<n;i++){
        cin >> ar[i];
    }
    for(int i=0;i<q;i++){
        int ll,rr;
        cin >> ll >> rr;
        qs[i].id=i,qs[i].l=ll,qs[i].r=rr;
    }
    sort(qs,qs+q,cmp);
    int ll=0,rr=0;
    for(int i=0;i<q;i++){
        while(ll<qs[i].l)del(ar[ll]++);
        while(ll>qs[i].l)add(ar[ll]--);
        while(rr<qs[i].r)add(ar[rr]++);
        while(rr>qs[i].r)del(ar[rr]--);
        if(sum[ar[ll]]==rr-ll+1){
            qs[i].val=1;
        }
    }
    sort(qs,qs+q,cmp1);
    for(int i=0;i<q;i++){
        cout << (qs[i].val?"Yes":"No");
        cout << endl;
    }
    return 0;
}
2025/7/23 20:25
加载中...