LUOGU P4587 [FJOI2016]神秘数(主席树)
##解题思路
如果区间内没有$1$,那么答案就为$1$,从这一点继续归纳。如果区间内有$x$个$1$,设区间内$[2,x+1]$的和为$sum$,如果$sum=0$,那么答案为$x+1$,否则$[1,x+sum]$中的所有数字一定可以被表示,然后这个操作每次使答案至少扩大$1$倍,再用一个主席树维护,时间复杂度$O(nlognlogA)$
##代码
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
const int N=100005;
const int M=N*33;
const int inf=1000000000;
typedef long long LL;
template<class T> void rd(T &x){
x=0;char ch=getchar();
while(!isdigit(ch)) ch=getchar();
while(isdigit(ch)) x=(x<<1)+(x<<3)+ch-'0',ch=getchar();
}
int n,m,a[N],rt[N],ls[M],rs[M],sum[M],cnt;
LL Sum[M];
void build(int &x,int l,int r,int k){
x=++cnt;
if(l==r) {sum[x]=1;Sum[x]=l;return ;}
int mid=(l+r)>>1;
if(k<=mid) build(ls[x],l,mid,k);
else build(rs[x],mid+1,r,k);
Sum[x]=Sum[ls[x]]+Sum[rs[x]];
}
void update(int pre,int &x,int l,int r,int k){
x=++cnt;ls[x]=ls[pre];rs[x]=rs[pre];
if(l==r) {sum[x]=sum[pre]+1;Sum[x]=Sum[pre]+l;return;}int mid=(l+r)>>1;
if(k<=mid) update(ls[pre],ls[x],l,mid,k);
else update(rs[pre],rs[x],mid+1,r,k);
Sum[x]=Sum[ls[x]]+Sum[rs[x]];
}
int query_tot(int u,int v,int l,int r,int k){
if(l==r) return sum[v]-sum[u];
int mid=(l+r)>>1;
if(k<=mid) return query_tot(ls[u],ls[v],l,mid,k);
else return query_tot(rs[u],rs[v],mid+1,r,k);
}
LL query_sum(int u,int v,int l,int r,int L,int R){
if(L<=l && r<=R) return Sum[v]-Sum[u];
int mid=(l+r)>>1;LL ret=0;
if(L<=mid) ret+=query_sum(ls[u],ls[v],l,mid,L,R);
if(mid<R) ret+=query_sum(rs[u],rs[v],mid+1,r,L,R);
return ret;
}
int main(){
rd(n);rd(a[1]);build(rt[1],1,inf,a[1]);
for(int i=2;i<=n;i++)
rd(a[i]),update(rt[i-1],rt[i],1,inf,a[i]);
rd(m);int l,r,now,k,tot,lst;
while(m--){
rd(l),rd(r);k=0;lst=0;
while(1){
now=query_sum(rt[l-1],rt[r],1,inf,lst,k+1);
if(!now) break;lst=k+2;k=now+k;
}
printf("%d\n",k+1);
}
return 0;
}
LUOGU P4587 [FJOI2016]神秘数(主席树)的更多相关文章
- P4587 [FJOI2016]神秘数(主席树)
题意:给出1e5个数 查询l,r区间内第一个不能被表示的数 比如1,2,4可以用子集的和表示出[1,7] 所以第一个不能被表示的是8 题解:先考虑暴力的做法 把这个区间内的数字按从小到大排序后 从前往 ...
- Luogu P4587 [FJOI2016]神秘数
一道好冷门的好题啊,算是对于一个小结论和数据结构的一点考验吧 首先看完题目我们发现要从这个神秘数的性质入手,我们观察or手玩可得: 如果有\(x\)个\(1\),那么\([1,x]\)都是可以表示出来 ...
- [[FJOI2016]神秘数][主席树]
明白之后 5min 就写好了-自闭- 这题的题意是问你 \([L,R]\) 区间的数字不能构成的数字的最小值- 首先考虑 如果 \([1,x]\) 可以被表示 那么加入一个 \(a_i\) 显然 \( ...
- 洛谷P4587 [FJOI2016]神秘数(主席树)
题面 洛谷 题解 考虑暴力,对于询问中的一段区间\([l,r]\),我们先将其中的数升序排序,假设当前可以表示出\([1,k]\)目前处理\(a_i\),假如\(a_i>k+1\),则答案就是\ ...
- 220722 T4 求和 /P4587 [FJOI2016]神秘数 (主席树)
好久没打主席树了,都忘了怎么用了...... 假设我们选了一些数能构成[0,x]范围内的所有值,下一个要加的数是k(k<=x+1),那么可以取到[0,x+k]内的所有取值,所以有一种做法: 对于 ...
- 洛谷 P4587 [FJOI2016]神秘数
大鸽子 llmmkk 正在补8.3号咕掉的题 时隔两个月,再看到这道题,我又是一脸懵,这种思维的培养太重要了 链接: P4587 题意: 给出 \(n\) 个点的序列,\(m\) 次询问区间神秘数. ...
- BZOJ 4408: [Fjoi 2016]神秘数 [主席树]
传送门 题意: 一个可重复数字集合S的神秘数定义为最小的不能被S的子集的和表示的正整数.例如S={1,1,1,4,13},8无法表示为集合S的子集的和,故集合S的神秘数为8.现给定n个正整数a[1]. ...
- BZOJ4408&4299[Fjoi 2016]神秘数——主席树
题目描述 一个可重复数字集合S的神秘数定义为最小的不能被S的子集的和表示的正整数.例如S={1,1,1,4,13},1 = 1 2 = 1+1 3 = 1+1+1 4 = 4 5 = 4+1 6 = ...
- 【bzoj4408】[Fjoi 2016]神秘数 主席树
题目描述 一个可重复数字集合S的神秘数定义为最小的不能被S的子集的和表示的正整数.例如S={1,1,1,4,13},1 = 12 = 1+13 = 1+1+14 = 45 = 4+16 = 4+1+1 ...
随机推荐
- SSM - 全局跨域处理
这几天在开发中编写项目时需要前后端分离,刚好涉及到跨域这个问题,很早之前做项目时也用过,也是在网上找的列子,来源已经无处可寻了,若侵必删! 跨域问题一般出现两者服务器不同或者不同的端口上访问资源时会存 ...
- CocoaPods中pod search报错的解决办法
pod search报错的原因: 每次使用pod search命令的使用会在该目录下生成一个search_index.json文件,会逐渐的增大,文件达到一定大小后,ruby解析里面的json字符就会 ...
- 如何稀释 流事件 (如,onscroll、change、input、mouseover 等 事件)
1.问题引入:https://segmentfault.com/q/1010000000707337?_ea=62905 2.javascript中的函数节流和函数去抖:https://www.cnb ...
- 【原】通过npm script运行webpack的原理
原理:在项目中,局部安装依赖,依赖如果有创建命令的情况下会在node_modules/.bin目录创建软链接,pack.json默认读取到.bin下的命令. 如有理解不对,请各位大神纠正
- 单例模式@Singleton在测试中的运用
前言 单例模式是一种比较常用的设计模式,目的是:保证一个类仅有一个实例,并提供一个访问它的全局访问点. 测试种可能用到的场景 : 在很多时候,有些对象我们希望在整个程序只有一个实例,如线程池.数据库连 ...
- Chrome-逆向分析JS-1分析google网站翻译器原文存放位置
剧透:就是使用了一下 Chrome DevTools 的 Memory 功能,通过已知的 JS 变量的值查找 JS 内存中变量的引用 # 一:不分析一下现有的网页翻译方法么? 总所周知,(As is ...
- 动态创建类/ swizzle class
动态创建类 Class subclass = objc_allocateClassPair(baseClass, subclassName, );//生成,指定父类 //添加方法,变量...一些操作 ...
- Hibernate注解详解(超全面不解释)
原博客地址:http://blog.csdn.net/sufei58/article/details/48223731 我只是收藏来方便自己查阅的,希望博主不要介意 一.实体Bean 每个持久化POJ ...
- JavaScript DOM编程艺术-第一章
发现基础不是很好,补习一下.37买了2本书(dom编程和高级程序设计). 以前读书总是自己勾勾画画,有点没意思.现在写下来,说不定会成为传世经典.哈哈...........随便扯扯淡. 第一天(201 ...
- Deepin环境下安装科学研究版Python和Pytorch--防网卡
Deepin环境下安装科学研究版Python和Pytorch--防网卡 由于本教程所引起的一切损失作者概不负责,本教程不使用pip和conda命令,因此下载好包后配合U盘可以给某个机器进行离线安装 · ...