4299: Codechef FRBSUM

https://www.lydsy.com/JudgeOnline/problem.php?id=4299

分析:

  主席树。

  https://blog.sengxian.com/solutions/bzoj-4408

代码:

 #include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<iostream>
#include<cctype>
using namespace std;
typedef long long LL; inline int read() {
int x=,f=;char ch=getchar();for(;!isdigit(ch);ch=getchar())if(ch=='-')f=-;
for(;isdigit(ch);ch=getchar())x=x*+ch-'';return x*f;
} const int N = ; int ls[N*], rs[N*], sum[N*], Root[N], CntNode; void update(int l,int r,int &rt,int last,int p) {
rt = ++CntNode;
sum[rt] = sum[last] + p;
if (l == r) return;
int mid = (l + r) >> ;
if (p <= mid) {
rs[rt] = rs[last];
update(l, mid, ls[rt], ls[last], p);
}
else {
ls[rt] = ls[last];
update(mid+, r, rs[rt], rs[last], p);
}
}
int query(int l,int r,int Head,int Tail,int x) {
if (l == r) {
return sum[Tail] - sum[Head];
}
int mid = (l + r) >> ;
if (x <= mid) return query(l, mid, ls[Head], ls[Tail], x);
else return sum[ls[Tail]] - sum[ls[Head]] + query(mid+, r, rs[Head], rs[Tail], x);
}
int main () { int n = read();
for (int i=; i<=n; ++i) {
int x = read();
update(, 1e9, Root[i], Root[i-], x);
}
int m = read();
while (m -- ) {
int l = read(), r = read(), ans = , tmp;
while (true) {
tmp = query(, 1e9, Root[l-], Root[r], ans);
if (tmp < ans) break;
ans = tmp + ;
}
printf("%d\n",ans);
}
return ;
}

4299: Codechef FRBSUM的更多相关文章

  1. BZOJ.4299.Codechef FRBSUM(主席树)

    题目链接 记mx为最大的满足1~mx都能组成的数. 考虑当前能构成1~v中的所有数,再加入一个数x,若x>v+1,则mx=v,x不会产生影响:否则x<=v+1,则新的mx=x+v. 对于区 ...

  2. bzoj 4299 Codechef FRBSUM

    定义一个集合的神秘数为不能表示成这个集合的某个子集和的最小正整数,给一个数列,多次求区间神秘数 $n \leq 100000$ sol: 考虑这个神秘数的性质,可以发现,如果神秘数是 $x$,那么 $ ...

  3. bzoj4408 [Fjoi 2016]神秘数 & bzoj4299 Codechef FRBSUM 主席树+二分+贪心

    题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=4299 https://lydsy.com/JudgeOnline/problem.php?id ...

  4. BZOJ4299 : Codechef FRBSUM

    若$[0,i]$的数都可以得到,那么$[1,所有不大于i+1的数的和]$的数都可以得到. 如此暴力枚举答案,用可持久化线段树支持查询,因为每次数字至少翻一倍,所以复杂度为$O(m\log^2n)$. ...

  5. 【Codechef FRBSUM】【FJOI2016】【BZOJ4299】【BZOJ 4408】 可持久化线段树

    4408: [Fjoi 2016]神秘数 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 475  Solved: 287[Submit][Status ...

  6. BZOJ4299 Codechef FRBSUM(主席树)

    感觉非常不可做,于是考虑有什么奇怪的性质. 先考虑怎么求子集和mex.将数从小到大排序,假设已经凑出了0~n的所有数,如果下一个数>n+1显然mex就是n+1了,否则若其为x则可以凑出1~n+x ...

  7. BZOJ4299: Codechef FRBSUM(主席树)

    题意 题目链接 数集S的ForbiddenSum定义为无法用S的某个子集(可以为空)的和表示的最小的非负整数. 例如,S={1,1,3,7},则它的子集和中包含0(S’=∅),1(S’={1}),2( ...

  8. (WC2016模拟十八)【BZOJ4299】[CodeChef]FRBSUM

    咕了若干天我终于来补坑了qwq HINT $1\leq N,M\leq 10^5$ $1\leq \sum A_i\leq 10^9$ 题解: 虽然场上做出来了但还是觉得好神啊! 假设当前集合能凑出$ ...

  9. [BZOJ4408&&BZOJ4299][FJOI2016 && Codechef]神秘数&&FRBSUM(主席树)

    4299: Codechef FRBSUM Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 550  Solved: 351[Submit][Statu ...

随机推荐

  1. sql 2008 远程过程调用失败 0x800706be

    啊哦,SQL Server挂了!sql 2008 远程过程调用失败 0x800706be,找了一下解决方案,如下: 1.打开控制面板->添加删除程序 2.卸载一个叫Microsoft SQL S ...

  2. 一个程序猿试用有道云笔记VIP功能体验

    熟悉我的朋友应该知道,我有一个微信公众号,叫做"汪子熙", 我会定期在上面推送技术文章. 而我绝大多数技术文章都是在每天上下班的地铁上用手机写的,然后到家后同步到电脑上,进行发表. ...

  3. 数据库操作(c#)

    windows窗体程序中的数据库操作部分 //数据库连接串 internal static string connstring = "Data Source = 192.168.1.1; I ...

  4. (String)、toString()与String.valueOf()的区别

    (String).Object.toString()正常情况下跟String.valueOf()没有区别. 但当Object是null的时候.toString会抛出异常.valueOf返回" ...

  5. 【洛谷P1196】[NOI2002]银河英雄传说

    银河英雄传说 题目链接 并查集时记录下以i为首的队列的长度(如果存在这个队列)num[i],便于合并, 和点i到队首的距离front[i],便于查询(在find时维护) #include<ios ...

  6. spring入门(二) 使用注解代替xml配置

    1.导包(略) 2.applicationContext.xml如下: <?xml version="1.0" encoding="UTF-8"?> ...

  7. JSONP 通用函数封装

    function jsonp({url, params, callback}) { return new Promise((resolve, reject) => { let script = ...

  8. jzoj5195. 【NOIP2017提高组模拟7.3】A(递推,打表)

    Description

  9. Linux分享笔记:系统状态检测命令小结

    作为一名合格的运维人员,要能很好地了解Linux服务器,要能熟练查看Linux系统的运行状态.以下是常用到的Linux系统状态检测命令. 1. ifconfig:用于获取网卡配置与网络状态等信息.通常 ...

  10. InheritableThreadLocal线程复用

    引自:http://www.cnblogs.com/sweetchildomine/p/6575666.html 虽然使用AOP可以获取方法签名,但是如果要获取方法中计算得出的数据,那么就得使用Thr ...