• [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);
    	}
    }
    
  • 相关阅读:
    java数的相加
    读大道至简第二章有感
    读大道至简第一章有感
    课题的跨专业组队
    返回一个整数数组中最大子数组的和。
    《构建之法》阅读笔记02
    单元测试(2)
    软件工程个人作业03
    单元测试
    团队
  • 原文地址:https://www.cnblogs.com/nibabadeboke/p/15839797.html
Copyright © 2020-2023  润新知