莫队全WA求助
查看原帖
莫队全WA求助
95170
Tune_楼主2021/11/25 19:03
#include<bits/stdc++.h>
using namespace std;
int n,q,a[100005],ans[100005]={0},res=0,cnt[100005]={0},f_k;
struct data
{
	int l,r,p;
}ques[100005];
bool cmp(data x,data y)
{
	if((x.l-1)/f_k==(y.l-1)/f_k)
		return x.r<y.r;
	return x.l/f_k<y.l/f_k;
}
void add(int x)
{
	if(++cnt[a[x]]==1)
		res++;
}
void del(int x)
{
	if(--cnt[a[x]]==0)
		res--;
}
int main()
{
	scanf("%d%d",&n,&q);
	for(int i=1;i<=n;i++)
		scanf("%d",&a[i]);
	for(int i=1;i<=q;i++)
	{
		scanf("%d%d",&ques[i].l,&ques[i].r);
		ques[i].p=i;
	}
	f_k=sqrt(n);
	sort(ques+1,ques+q+1,cmp);
	int p1=1,p2=0;
	for(int i=1;i<=q;i++)
	{
		int L=ques[i].l,R=ques[i].r;
		while(p1>L)
		{
			p1--;
			add(a[p1]);
		}
		while(p2<R)
		{
			p2++;
			add(a[p2]);
		}
		while(p1<L)
		{
			del(a[p1]);
			p1++;
		}
		while(p2>R)
		{
			del(a[p2]);
			p2--;
		}
		if(res==(R-L+1)) 
			ans[ques[i].p]=1;
	}
	for(int i=1;i<=q;i++)
	{
		if(ans[i]==1)
			printf("Yes\n");
		else
			printf("No\n");
	}
	return 0;
}
2021/11/25 19:03
加载中...