TLE on #9
查看原帖
TLE on #9
866613
sansesantongshun楼主2024/3/29 23:53

数据有毒

#include<bits/stdc++.h>
using namespace std;
int n,nm,m,a[500005],b[500005],d[500005],e[500005],f[500005],g[750],ll[750],rr[750],l=1,r=0,x,ans[500005];
struct node
{
	int id,l,r;
} c[500005];
bool operator<(node x,node y)
{
	return b[x.l]==b[y.l]?(b[x.l]&1?x.r<y.r:x.r>y.r):x.l<y.l;
}
int main()
{
	cin>>n;
	for (int i=1;i<=n;++i)
	scanf("%d",&a[i]);
	cin>>m;
	for (int i=1;i<=m;++i)
	{
		c[i].id=i;
		scanf("%d%d",&c[i].l,&c[i].r);
	}
	nm=max(1,(int)round(n/sqrt(m)));
	for (int i=1;i<=n;++i)
	b[i]=(i-1)/nm+1;
	sort(c+1,c+m+1);
	for (int i=1;i<=500000;++i)
	{
		f[i]=(i-1)/707+1;
		if (ll[f[i]]==0)
		ll[f[i]]=i;
		rr[f[i]]=i;
	}
	for (int i=1;i<=m;++i)
	{
		while (l<c[i].l)
		{
			if (d[a[l]]==1)
			{
				--e[a[l]];
				--g[f[a[l]]];
			}
			--d[a[l]];
			if (d[a[l]]==1)
			{
				++e[a[l]];
				++g[f[a[l]]];
			}
			++l;
		}
		while (l>c[i].l)
		{
			--l;
			if (d[a[l]]==1)
			{
				--e[a[l]];
				--g[f[a[l]]];
			}
			++d[a[l]];
			if (d[a[l]]==1)
			{
				++e[a[l]];
				++g[f[a[l]]];
			}
		}
		while (r<c[i].r)
		{
			++r;
			if (d[a[r]]==1)
			{
				--e[a[r]];
				--g[f[a[r]]];
			}
			++d[a[r]];
			if (d[a[r]]==1)
			{
				++e[a[r]];
				++g[f[a[r]]];
			}
		}
		while (r>c[i].r)
		{
			if (d[a[r]]==1)
			{
				--e[a[r]];
				--g[f[a[r]]];
			}
			--d[a[r]];
			if (d[a[r]]==1)
			{
				++e[a[r]];
				++g[f[a[r]]];
			}
			--r;
		}
		for (x=1;x<=f[500000];++x)
		if (g[x])
		break;
		if (x<=f[500000])
		for (int j=ll[x];j<=rr[x];++j)
		if (e[j])
		{
			ans[c[i].id]=j;
			break;
		}
	}
	for (int i=1;i<=m;++i)
	cout<<ans[i]<<'\n';
}
2024/3/29 23:53
加载中...