求助莫队
查看原帖
求助莫队
708963
WaterSky楼主2024/4/7 13:03

只过了1个,其他全WA

#include<bits/stdc++.h>
using namespace std;
long long a[500010],cnt[100010];
long long ans[200010];
long long n,m,len,res;
long long curL,curR;
struct wbx{
	long long p,l,r;
}q[1000005];
bool cmp(const wbx &a, const wbx &b)
{
    return (a.l/len) == (b.l/len) ? a.r < b.r : a.l < b.l;
}
void add(long long x)
{
	cnt[a[x]]++; 
	if(cnt[a[x]]>cnt[res]) res=a[x];
}
void del(long long x)
{
	cnt[a[x]]--;
}
int main(){
	scanf("%lld%lld",&n,&m);
	len=sqrt(n);
	for(int i=1;i<=n;i++)
		scanf("%lld",&a[i]);
	scanf("%lld",&m);
	for(int i=1;i<=m;i++)
	{
		scanf("%lld%lld",&q[i].l,&q[i].r);
		q[i].p=i;
	}
	sort(q+1,q+1+m,cmp);
	for(int i=1;i<=m;i++)
	{
		int L=q[i].l,R=q[i].r;
		while(curL<L) del(curL++);
		while(curL>L) add(--curL);
		while(curR<R) add(++curR);
		while(curR>R) del(curR--); 
		if(cnt[res]>(R-L+1)/2)
		ans[q[i].p]=res;
		else ans[q[i].p]=0;
	}
	for(int i=1;i<=m;i++) 
	{
		if(ans[i]==0) cout<<"no"<<endl;
		else cout<<"yes "<<ans[i]<<endl; 
	}
	return 0;
}
2024/4/7 13:03
加载中...