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

$n \leq 100000$

sol:

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

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

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

可以证明这样轮次很少

#include <bits/stdc++.h>
#define LL long long
#define rep(i, s, t) for (register int i = (s), i##end = (t); i <= i##end; ++i)
#define dwn(i, s, t) for (register int i = (s), i##end = (t); i >= i##end; --i)
using namespace std;
inline int read() {
int x = , f = ; char ch;
for (ch = getchar(); !isdigit(ch); ch = getchar()) if (ch == '-') f = -f;
for (; isdigit(ch); ch = getchar()) x = * x + ch - '';
return x * f;
}
const int maxn = , MX = 1e9;
int n, q, a[maxn];
int root[maxn], ls[maxn << ], rs[maxn << ], val[maxn << ], ToT;
void Insert(int &x, int pre, int l, int r, int pos) {
x = ++ToT; val[x] = val[pre] + pos;
if(l == r) return; int mid = (l + r) >> ;
ls[x] = ls[pre]; rs[x] = rs[pre];
if(pos <= mid) Insert(ls[x], ls[pre], l, mid, pos);
else Insert(rs[x], rs[pre], mid+, r, pos);
}
int query(int x, int pre, int l, int r, int pos) {
if(l == r) return val[x] - val[pre];
int mid = (l + r) >> ;
if(pos <= mid) return query(ls[x], ls[pre], l, mid, pos);
else return val[ls[x]] - val[ls[pre]] + query(rs[x], rs[pre], mid+, r, pos);
}
int main() {
n = read();
rep(i, , n) a[i] = read(), Insert(root[i], root[i - ], , MX, a[i]);
for(q = read(); q; q--) {
int l = read(), r = read(); int lst = , mx = ;
while() {
mx = query(root[r], root[l - ], , MX, mx + );
if(lst == mx) break; lst = mx;
//cout << mx << " " << lst << endl;
}
printf("%d\n", lst + );
}
}

最新文章

  1. Mysql Sql语句令某字段值等于原值加上一个字符串
  2. unity 改变场景
  3. LR11录制脚本时打不开浏览器,如何解决?
  4. 查询Oracle锁表和解决方法
  5. bash脚本编程之二 条件判断and 逻辑运算
  6. bootstrap 学习片段
  7. ESLint 检查代码质量
  8. 关于Spatial referencing by geographical identifiers 标准
  9. 基于反射的通过set方法的依赖注入,可以看成一种设计模式,自己来用
  10. POJ2217 Secretary 后缀数组&amp;&amp;高度数组
  11. Logging in Java
  12. 使用css3和伪元素制作的一个立体导航条
  13. 解决hash冲突的三个方法
  14. Unity中建立文本保存数据
  15. springcloud-知识点总结(二):Ribbon&amp;Feign
  16. 《FPGA全程进阶---实战演练》第五章 基于74HC595的LED操作
  17. [UE4]点积、余弦和急停
  18. Linux下打开超大文件方法
  19. dedecms 安装后 管理后台ie假死 无响应的解决方法
  20. Ng第十七课:大规模机器学习(Large Scale Machine Learning)

热门文章

  1. Linux基础系列:常用命令(3)
  2. commonAncestor
  3. css系列(4)简介
  4. SpringBoot整合Redis集群
  5. spring data jpa是什么?
  6. Android 平台电容式触摸屏的驱动基本原理
  7. JSP笔记01——尝试
  8. 基于SSM的单点登陆03
  9. 用vim写python脚本的自动缩进格式设置
  10. JSP--内置对象&amp;动作标签介绍