玄1关
  • 板块灌水区
  • 楼主__DayLight__
  • 当前回复5
  • 已保存回复5
  • 发布时间2024/4/25 13:13
  • 上次更新2024/4/25 17:53:22
查看原帖
玄1关
642434
__DayLight__楼主2024/4/25 13:13

P3901求调

#include<bits/stdc++.h>
using namespace std;
const int N=100005;
int n,m,sq;
int a[N],cnt[N],ans[N];
struct node
{
	int L,R,id;
}q[N];
bool cmp(node x,node y)
{
	return (x.L/sq)==(y.L/sq)?x.R<y.R:x.L<y.L;
}
int ANS;
void add(int x)
{
	if((++cnt[a[x]])==1)ANS++;
}
void del(int x)
{
	if(!(--cnt[a[x]]))ANS--;
}
int L,R;
int main(){
	cin>>n;
	sq=sqrt(n);
	for(int i=1; i<=n; i++)
		scanf("%d",&a[i]);
	cin>>m;
	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++)
    {
		while(L<q[i].L)del(L++);
		while(L>q[i].L)add(--L);
    	while(R<q[i].R)add(++R);
		while(R>q[i].R)del(R--);
    	if(R-L==ANS)ans[q[i].id]=1;
    }
    for(int i=1; i<=m; i++)
    	if(ans[i])puts("Yes");
    	else puts("No");
	return 0;
} 
2024/4/25 13:13
加载中...