50wa 看不懂了
查看原帖
50wa 看不懂了
953850
qweasdqweasdqw楼主2024/12/10 11:00
#include <bits/stdc++.h>
using namespace std;
const int N=1e7;
int n,m;
int L[N],R[N],sum[N],rt[N],tot;
int change(int p,int l,int r,int pos,int v)
{
	int rt=++tot;
	L[rt]=L[p];
	R[rt]=R[p];
	sum[rt]=sum[p]+v;
	if(l==r)
	return rt;
	int mid=(l+r)>>1;
	if(pos<=mid)
	L[rt]=change(L[rt],l,mid,pos,v);
	else
	R[rt]=change(R[rt],mid+1,r,pos,v);
	return rt;
}
int query(int u,int v,int l,int r,int s,int t)
{
	if(s<=l&&t>=r)
	return sum[v]-sum[u];
	int mid=(l+r)>>1;
	int ans=0;
	if(s<=mid)
	ans+=query(L[u],L[v],l,mid,s,t);
	if(t>mid)
	ans+=query(R[u],R[v],mid+1,r,s,t);
	return ans;
}
int a[N];
int main()
{
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
		rt[i]=change(rt[i-1],1,N,a[i],a[i]);
	}
	cin>>m;
	while(m--)
	{
		int l,r;
		cin>>l>>r;
		int ans=1;
		for(;;)
		{
			int res=query(rt[l-1],rt[r],1,N,1,ans);
			if(res>=ans)
			ans=res+1;
			else
			break;
		}
		cout<<ans<<endl;
	}
}
2024/12/10 11:00
加载中...