莫队70分求助!
查看原帖
莫队70分求助!
516468
_Give_up_楼主2022/12/4 11:19
#include<bits/stdc++.h>
#define N 100010

using namespace std;

int read()
{
    int x = 0,f = 1;
    char c = getchar();
    while(c<'0' || c>'9')
	{
        if(c=='-') f = -1;
        c = getchar();
    }
    while(c>='0' && c<='9')
	{
        x = (x<<3)+(x<<1)+(c^48);
        c = getchar();
    }
    return x*f;
}

struct rec
{
	int l,r,id;
};

int sum = 0,a[N],f[N],len,ans[N];
rec q[N];

bool cmp(rec a,rec b)
{
	return (a.l/len==b.l/len ? a.r<b.r : a.l<b.l);
}

void add(int x)
{
	f[a[x]]++;
	if (f[a[x]]>1) sum++;
}

void dele(int x)
{
	f[a[x]]--;
	if (f[a[x]]==1) sum--;
}

int main()
{
	int n=read(),m=read();
	len = sqrt(n);
	for (int i=1;i<=n;i++)
		a[i]=read();
	for (int i=1;i<=m;i++)
		q[i].l=read(),q[i].r=read(),q[i].id=i;
	sort(q+1,q+m+1,cmp);
	int l=1,r=0;
	for (int i=1;i<=m;i++)
	{
		while (l>q[i].l) add(--l);
		while (l<q[i].l) dele(l++);
		while (r<q[i].r) add(++r);
		while (r>q[i].r) dele(r--);
		if(sum) ans[q[i].id]=false;
		else ans[q[i].id]=true;
	}
	for (int i=1;i<=m;i++)
	{
		if (ans[i]) cout << "Yes" << endl;
		else cout << "No" << endl;
	}
	return 0; 
}

#2 #6 #7 WA

2022/12/4 11:19
加载中...