定义一个集合的神秘数为不能表示成这个集合的某个子集和的最小正整数,给一个数列,多次求区间神秘数

$n \leq 100000$

sol:

考虑这个神秘数的性质,可以发现,如果神秘数是 $x$,那么 $1 \sim x$ 的所有数都能凑出来

如果每次往集合中加入一个数,如果比 $x$ 大,则神秘数不变,如果比 $x$ 小,则神秘数至少 $+x$

于是每次可以用值域主席树维护一下区间小于等于 $x$ 的所有数的和,然后对于每个区间,先把神秘数 $x$ 设为 $0$,每轮求小于等于 $x+1$ 的所有数的和,如果和就是 $x$,则 $x+1$ 是神秘数,否则继续求

可以证明这样轮次很少

  1. #include <bits/stdc++.h>
  2. #define LL long long
  3. #define rep(i, s, t) for (register int i = (s), i##end = (t); i <= i##end; ++i)
  4. #define dwn(i, s, t) for (register int i = (s), i##end = (t); i >= i##end; --i)
  5. using namespace std;
  6. inline int read() {
  7. int x = , f = ; char ch;
  8. for (ch = getchar(); !isdigit(ch); ch = getchar()) if (ch == '-') f = -f;
  9. for (; isdigit(ch); ch = getchar()) x = * x + ch - '';
  10. return x * f;
  11. }
  12. const int maxn = , MX = 1e9;
  13. int n, q, a[maxn];
  14. int root[maxn], ls[maxn << ], rs[maxn << ], val[maxn << ], ToT;
  15. void Insert(int &x, int pre, int l, int r, int pos) {
  16. x = ++ToT; val[x] = val[pre] + pos;
  17. if(l == r) return; int mid = (l + r) >> ;
  18. ls[x] = ls[pre]; rs[x] = rs[pre];
  19. if(pos <= mid) Insert(ls[x], ls[pre], l, mid, pos);
  20. else Insert(rs[x], rs[pre], mid+, r, pos);
  21. }
  22. int query(int x, int pre, int l, int r, int pos) {
  23. if(l == r) return val[x] - val[pre];
  24. int mid = (l + r) >> ;
  25. if(pos <= mid) return query(ls[x], ls[pre], l, mid, pos);
  26. else return val[ls[x]] - val[ls[pre]] + query(rs[x], rs[pre], mid+, r, pos);
  27. }
  28. int main() {
  29. n = read();
  30. rep(i, , n) a[i] = read(), Insert(root[i], root[i - ], , MX, a[i]);
  31. for(q = read(); q; q--) {
  32. int l = read(), r = read(); int lst = , mx = ;
  33. while() {
  34. mx = query(root[r], root[l - ], , MX, mx + );
  35. if(lst == mx) break; lst = mx;
  36. //cout << mx << " " << lst << endl;
  37. }
  38. printf("%d\n", lst + );
  39. }
  40. }

bzoj 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. 4299: Codechef FRBSUM

    4299: Codechef FRBSUM https://www.lydsy.com/JudgeOnline/problem.php?id=4299 分析: 主席树. https://blog.se ...

  3. [BZOJ 3509] [CodeChef] COUNTARI (FFT+分块)

    [BZOJ 3509] [CodeChef] COUNTARI (FFT+分块) 题面 给出一个长度为n的数组,问有多少三元组\((i,j,k)\)满足\(i<j<k,a_j-a_i=a_ ...

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

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

  5. bzoj 4546: codechef XRQRS [可持久化Trie]

    4546: codechef XRQRS 可持久化Trie codechef上过了,bzoj上蜜汁re,看别人说要开5.2e5才行. #include <iostream> #includ ...

  6. BZOJ 3221: [Codechef FEB13] Obserbing the tree树上询问( 可持久化线段树 + 树链剖分 )

    树链剖分+可持久化线段树....这个一眼可以看出来, 因为可持久化所以写了标记永久化(否则就是区间修改的线段树的持久化..不会), 结果就写挂了, T得飞起...和管理员拿数据调后才发现= = 做法: ...

  7. BZOJ 3514: Codechef MARCH14 GERALD07加强版( LCT + 主席树 )

    从左到右加边, 假如+的边e形成环, 那么记下这个环上最早加入的边_e, 当且仅当询问区间的左端点> _e加入的时间, e对答案有贡献(脑补一下). 然后一开始是N个连通块, 假如有x条边有贡献 ...

  8. BZOJ 4260: Codechef REBXOR( trie )

    求出前缀和, 那么以第x个元素结尾的最大异或值是max(sumx^sump)(1≤p<x), 用trie加速. 后缀同理, 然后扫一遍就OK了.时间复杂度O(31N) ------------- ...

  9. bzoj 3509: [CodeChef] COUNTARI] [分块 生成函数]

    3509: [CodeChef] COUNTARI 题意:统计满足\(i<j<k, 2*a[j] = a[i] + a[k]\)的个数 \(2*a[j]\)不太好处理,暴力fft不如直接暴 ...

随机推荐

  1. iOS 关于 Missing iOS Distribution signing identity for.... 等 打包 校验 出现的事故 处理经验

    着实郁闷了一阵子,不知道为什么 证书和配置文件都没有问题 在Archieve后  validate 提示:"Missing iOS Distribution signing identity ...

  2. 大型网站系统与 Java 中间件实践

    http://wanglizhi.github.io/2016/07/27/JavaWeb-And-MiddleWare/ 第一章 分布式系统介绍 分布式系统的定义:组件分布在网络计算机上,组件间仅仅 ...

  3. 在树莓派上用Python控制LED

    所需材料 一个已经安装配置好了的树莓派 连接控制树莓派所用的其他必须设备 200Ω电阻 x 8 led x 8 面包板及连接线若干 电路连接 电路图 按照电路图所示,在面包板上进行连接. 编写程序 安 ...

  4. MongoDB快速入门(五)- Where子句

    RDBMS Where子句等效于MongoDB 查询文档在一些条件的基础上,可以使用下面的操作 操作 语法 示例 RDBMS等效语句 Equality {<key>:<value&g ...

  5. 搭建配置cacti,采集信息监控

    安装cactilamp环境[iyunv@Cacti ~]#service iptables stop //关闭防火墙服务[iyunv@Cacti ~]#chkconfig iptables off / ...

  6. awk之腾迅面试题1

    1.题目如下: 3 5 6 72 3 1 04 5 6 92 3 4 42 2 1 04 5 0 9假如把2列和3列的值作为新的第5列,第5列的平均值为avg5,求第5列中大于avg5的行数.  aw ...

  7. Linux操作系统的安装以及基本的操作命令详解

    背景:使用的虚拟机安装Linux  虚拟机使用的是VMware  Linux版本:CentOS-6.7-X86    自行下载:CentOS-6.7-x86_64-bin-DVD1.iso 打开VMw ...

  8. Hadoop学习1(初识hadoop)

    Hadoop生态系统的特点 1)源代码开源 2)社区活跃,参与者多 3)涉及分布式存储和计算的各方面 4)已得到企业界的验证 Hadoop构成 1) 分布式文件系统HDFS(Hadoop Distri ...

  9. Google Chrome 未响应。是否立即重新启动?

    不当的退出会造成 Google Chrome 无法启动.出现“Google Chrome 未响应.是否立即重新启动?”的错误.要解决这个问题:      1.同时按住Windows旗帜键 + R键,调 ...

  10. UVA 11186 Circum Triangle (枚举三角形优化)(转)

    题意:圆上有n个点,求出这n个点组成的所有三角形的面积之和 题解: 当我们要求出S(i,j,k)时,我们需要假设k在j的左侧,k在i与j之间,k在i的右侧. 如果k在 j的左侧  那么 S(i,j,k ...