萌新莫队样例过数据全WA,求调
查看原帖
萌新莫队样例过数据全WA,求调
764957
AnEasySong楼主2023/8/16 14:02

rt,人已经麻了,对着题解调了好久都没用

#include <bits/stdc++.h>
#define ll long long
using namespace std;
ll rd();
const ll N=1e6+1;

int n,q;
ll a[N];
int sq;
struct node
{
	ll l,r,id;
}Q[N];

bool cmp(const node &a,const node &b)
{
	/*
	if(a.l/sq!=b.l/sq) return a.l<b.l;
	if(a.l/sq&1) return a.r<b.r;
	return a.r>b.r;
	*/
	return (a.l/sq) == (b.l/sq) ? a.r < b.r : a.l < b.l;
}

int ans=0;
int cnt[N];

void add(int x)
{
	/*
	if(cnt[a[x]]==0) ans++;
	cnt[a[x]]++;
	*/
	if((++cnt[a[x]])==1) ++ans;
}

void del(int x)
{
	/*
	cnt[a[x]]--;
	if(!cnt[a[x]]==0) ans--;
	*/
	if((--cnt[a[x]])==0) --ans;
}

int L,R;
bool Ans[N];

int main()
{
	//freopen(".in","r",stdin);freopen(".out","w",stdout);

	n=rd(),q=rd();
	sq=(int)sqrt(n);
	for(int i=1;i<=n;i++) a[i]=rd();
	for(int i=1;i<=q;i++)
	{
		Q[i].l=rd();
		Q[i].r=rd();
		Q[i].id=i;
	}
	
	sort(Q+1,Q+1+q,cmp);
	
	for(int i=1;i<=q;i++)
	{
		int l=Q[i].l,r=Q[i].r;
		while(L<l) del(a[L++]);
		while(L>l) add(a[--L]);
		while(R<r) add(a[++R]);
		while(R>r) del(a[R--]);
		if(ans==(r-l+1)) Ans[Q[i].id]=1;
	}
	
	for(int i=1;i<=q;i++)
	{
		if(Ans[i]==1) puts("Yes");
		else puts("No");
	}

	//fclose(stdin);fclose(stdout);
	return 0;
}
ll rd()
{
	ll x=0;
	char c=getchar();
	while(!isdigit(c))
	{
		c=getchar();
	}
	while(isdigit(c))
	{
		x=(x<<1)+(x<<3)+c-'0';
		c=getchar();
	}
	return x;
}
2023/8/16 14:02
加载中...