(bzoj4408)[FJOI2016]神秘数(可持久化线段树)

bzoj luogu

对于一个区间的数,排序之后从左到右每一个数扫

如果扫到某个数a时已经证明了前面的数能表示[1,x],那么分情况:

a>x+1,不能继续表示下去,答案就是x+1

否则表示区间变为[1,x+a]。

用主席树上二分优化这个过程。

 1 #include<cstdio>
2 #include<algorithm>
3 using namespace std;
4 const int N=100069;
5 const int orz_phy=998244353;
6 #define cint const int
7 template<typename TP> inline void read(TP &_t)
8 {
9 TP _r=0,_f=1;char _c=getchar();
10 while(_c<'0'||_c>'9'){if(_c=='-')_f=-1;_c=getchar();}
11 while(_c>='0'&&_c<='9'){_r=_r*10+_c-'0';_c=getchar();}
12 _t=_r*_f;
13 }
14 int n,a[N];
15
16 int rt[N];
17 struct chairman
18 {
19 int s[N*88],son[N*88][2],ct;
20 void ins(cint pp,int &px,cint pl,cint pr,cint x)
21 {
22 px=++ct,s[px]=s[pp]+x;
23 if(pl==pr) return;
24 int mi=(pl+pr)>>1;
25 if(x<=mi) son[px][1]=son[pp][1],ins(son[pp][0],son[px][0],pl,mi,x);
26 else son[px][0]=son[pp][0],ins(son[pp][1],son[px][1],mi+1,pr,x);
27 }
28 int query(cint pp,cint px,cint pl,cint pr,cint l,cint r)
29 {
30 if(l<=pl&&pr<=r) return s[px]-s[pp];
31 int mi=(pl+pr)>>1;
32 int ret=0;
33 if(l<=mi) ret+=query(son[pp][0],son[px][0],pl,mi,l,r);
34 if(r>mi) ret+=query(son[pp][1],son[px][1],mi+1,pr,l,r);
35 return ret;
36 }
37 }ct;
38
39 int T,li,ri;
40 signed main()
41 {
42 read(n);
43 for(int i=1;i<=n;i++) read(a[i]),ct.ins(rt[i-1],rt[i],1,1000000000,a[i]);
44 read(T);
45 while(T--)
46 {
47 read(li),read(ri);
48 int ans=1,tmp=0;
49 while(orz_phy)
50 {
51 if((tmp=ct.query(rt[li-1],rt[ri],1,1000000000,1,ans))>=ans) ans=tmp+1;
52 else break;
53 }
54 printf("%d\n",ans);
55 }
56 return 0;
57 }

(bzoj4408)[FJOI2016]神秘数(可持久化线段树)的更多相关文章

  1. 【BZOJ-4408】神秘数 可持久化线段树

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

  2. BZOJ 4408 FJOI2016 神秘数 可持久化线段树

    Description 一个可重复数字集合S的神秘数定义为最小的不能被S的子集的和表示的正整数.例如S={1,1,1,4,13},1 = 12 = 1+13 = 1+1+14 = 45 = 4+16 ...

  3. Bzoj 4408: [Fjoi 2016]神秘数 可持久化线段树,神题

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

  4. BZOJ 4408: [Fjoi 2016]神秘数 可持久化线段树

    4408: [Fjoi 2016]神秘数 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=4408 Description 一个可重复数字集 ...

  5. 51Nod 1175 区间中第K大的数 (可持久化线段树+离散)

    1175 区间中第K大的数 基准时间限制:1 秒 空间限制:131072 KB 分值: 160 难度:6级算法题   一个长度为N的整数序列,编号0 - N - 1.进行Q次查询,查询编号i至j的所有 ...

  6. [bzoj4408][Fjoi2016]神秘数

    Description 一个可重复数字集合$S$的神秘数定义为最小的不能被$S$的子集的和表示的正整数. 例如$S={1,1,1,4,13}$, $1=1$, $2=1+1$, $3=1+1+1$, ...

  7. 题解【bzoj4587 & bzoj4408 [FJOI2016]神秘数】

    Description \(n\) 个数的序列,每次询问一个区间,求最小的一个数使得不能用这个区间中的数之和表示. \(n \leq 10^5, \sum a_i \leq 10^9\) 这两个题一个 ...

  8. 【BZOJ4408】[FJOI2016]神秘数(主席树)

    [BZOJ4408][FJOI2016]神秘数(主席树) 题面 BZOJ 洛谷 题解 考虑只有一次询问. 我们把所有数排个序,假设当前可以表示出的最大数是\(x\). 起始\(x=0\). 依次考虑接 ...

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

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

随机推荐

  1. Solution -「LOCAL」舟游

    \(\mathcal{Description}\)   \(n\) 中卡牌,每种三张.对于一次 \(m\) 连抽,前 \(m-1\) 次抽到第 \(i\) 种的概率是 \(p_i\),第 \(m\) ...

  2. 部署 Docker Registry 并配置认证登录

    文章目录 搭建 Docker Registry 创建本地映射目录 启动 Docker Registry 配置 Docker Registry 配置 Docker Registry 认证 启动带认证的 ...

  3. 依赖于angular的table组件

    组件实现了以下功能 1. 列宽可动态拖动 2. 列数据排序 3. 列过滤 4. 列位置自由调整 除了需要引入angular.js(我用的是1.4.6版本),还需要引用一个angular衍生出来的插件n ...

  4. Python中random模块的用法案例

    1 import random # 调用random模块 2 3 a = random.random() # 随机从0-1之间抽取一个小数 4 print(a) 5 6 a = random.rand ...

  5. Windows原理深入学习系列-强制完整性控制

    欢迎关注微信公众号:[信安成长计划] 0x00 目录 0x01 介绍 0x02 完整性等级 0x03 文件读取测试 0x04 进程注入测试 0x05 原理分析 Win10_x64_20H2 0x06 ...

  6. Renix绑定流详解——网络测试仪实操

    一.测试环境 使用测试仪模拟两台主机直接发流,中间有路由器.如下图,测试仪port1端口模拟的主机IP为10.1.1.2,port2端口模拟的主机IP为10.2.1.2 二.预约测试资源 打开Reni ...

  7. Smartbi与Tableau功能盘点,我选Smartbi!

    只要对大数据BI行业有所了解的人群,想必这两个数据分析工具Tableau和PowerBI都已经耳熟能详了吧. ·关于Tableau Tableau是一种数据可视化的工具,可提供复杂的计算.数据混合和仪 ...

  8. 报表工具和BI商业智能的区别,你真的弄清楚了吗?

    许多人在投身大数据行业的时候,肯定会听到的两个词就是"报表工具"和"BI商业智能".但是大部分人并不太清楚这两者之间的概念和区别,认为报表就是BI,BI就是报表 ...

  9. 别再用 Redis List 实现消息队列了,Stream 专为队列而生

    上回说到使用 Redis 的 List 实现消息队列有很多局限性,比如: 没有良好的 ACK 机制: 没有 ConsumerGroup 消费组概念: 消息堆积. List 是线性结构,想要查询指定数据 ...

  10. Visual Studio 的快捷不能用时候,我们只要选择重置就可以用了。

    当发现Visual Studio 的快捷不能用时候,我们只要选择重置就可以用了.