[FJOI2016] 神秘数

#include<cstdio>
using namespace std;
const int N = 1e5 + 5;
int n,m,rt[N],sum[N << 5],ls[N << 5],rs[N << 5],size;

void update(int &p1,int p2,int l,int r,int u)
{
	p1 = ++size,sum[p1] = sum[p2] + u;
	if (l == r) return;
	int mid = l + r >> 1;
	if (u <= mid) rs[p1] = rs[p2],update(ls[p1],ls[p2],l,mid,u);
	else ls[p1] = ls[p2],update(rs[p1],rs[p2],mid + 1,r,u); 
}
int query(int p1,int p2,int l,int r,int L,int R)
{
	if (l >= L && r <= R) return sum[p2] - sum[p1];
	int mid = l + r >> 1,tmp = 0;
	if (L <= mid) tmp = query(ls[p1],ls[p2],l,mid,L,R);
	if (R > mid) tmp += query(rs[p1],rs[p2],mid + 1,r,L,R);
	return tmp;
}
int main()
{
	scanf("%d",&n);
	for (int i = 1,q; i <= n; i++)
		scanf("%d",&q),update(rt[i],rt[i - 1],1,1e9,q);
	scanf("%d",&m);
	for (int i = 1,q,p; i <= m; i++)
	{
		scanf("%d%d",&q,&p);
		int ans = 1,k = query(rt[q - 1],rt[p],1,1e9,1,1);
		for (; k != ans - 1;) ans = k + 1,k = query(rt[q - 1],rt[p],1,1e9,1,ans);
		printf("%d\n",ans);
	}
}
posted @ 2022-01-24 16:05  RiverSheep  阅读(46)  评论(0)    收藏  举报