莫队
#include<iostream> #include<cmath> #include<algorithm> #include<cstdio> using namespace std; const int N=100006; int n,m,l,r,nu,q; int ar[N],num[N],ans[N]; struct node{ int x,y,z; }a[N]; int get(){ char zy=getchar(); int z=1,y=0; while(zy>‘9‘||zy<‘0‘){ if(zy==‘-‘)z=-1; zy=getchar(); } while(zy>=‘0‘&&zy<=‘9‘){ y=y*10+zy-‘0‘; zy=getchar(); } return z*y; } bool cmp(node a,node b){ return (a.x/q)==(b.x/q)?a.y<b.y:(a.x/q)<(b.x/q); } void add(int p){ num[ar[p]]++; if(num[ar[p]]==2)nu++; } void del(int p){ num[ar[p]]--; if(num[ar[p]]==1)nu--; } int main(){ n=get();m=get(); q=sqrt(n); for(int i=1;i<=n;i++){ ar[i]=get(); } for(int i=1;i<=m;i++){ a[i].x=get(); a[i].y=get(); a[i].z=i; } sort(a+1,a+1+m,cmp); for(int i=1;i<=m;i++){ while(r<a[i].y)add(++r); while(l>a[i].x)add(--l); while(r>a[i].y)del(r--); while(l<a[i].x)del(l++); if(!nu) ans[a[i].z]=1; } for(int i=1;i<=m;i++){ if(ans[i]) printf("Yes\n"); else printf("No\n"); } return 0; }
原文地址:https://www.cnblogs.com/hahaha2124652975/p/11237240.html
时间: 2024-10-24 19:57:51