莫队没过样例,不知道为什么
查看原帖
莫队没过样例,不知道为什么
464732
luqyou楼主2022/12/10 14:38
#include<bits/stdc++.h>
using namespace std;
int n,m,bl,nowans,nl,nr,cnt[100001],a[100001];
bool ans[100001];
struct ask{
    int l,r,id;
}q[100001];
bool cmp(ask a,ask b){
	if(a.l/bl==b.l/bl) return a.l<b.l;
	else return a.r<b.r;
}
void add(int pos){
    if((++cnt[a[pos]])) nowans++;
}
void del(int pos){
    if(!(--cnt[a[pos]])) nowans--;
}
int main(){
	scanf("%d%d",&n,&m);
    bl=sqrt(n);
    for(int i=1;i<=n;i++){
    	scanf("%d",&a[i]);
	}
    for(int i=1;i<=m;i++){
    	scanf("%d%d",&q[i].l,&q[i].r);
        q[i].id=i;
    }
    sort(q+1,q+1+m,cmp);
    for(int i=1;i<=m;i++){
        int L=q[i].l,R=q[i].r;
        while(nl<L){
        	del(nl);
        	nl++;
		}
        while(nl>L){
        	nl--;
        	add(nl);
		}
        while(nr<R){
        	nr++;
        	add(nr);
		}
        while(nr>R){
        	del(nr);
        	nr--;
		}
        if(nowans==(R-L+1)) ans[q[i].id]=1;
    }
    for(int i=1;i<=m;i++){
        if(ans[i]) printf("Yes");
		else printf("No");
		printf("\n");
    }
    return 0;
}
2022/12/10 14:38
加载中...