明白之后 5min 就写好了…自闭…

这题的题意是问你 \([L,R]\) 区间的数字不能构成的数字的最小值…

首先考虑 如果 \([1,x]\) 可以被表示

那么加入一个 \(a_i\) 显然 \([1,x+a_i]\) 都可以被表示

有什么好办法呢

当然有 \(O(q * \sum_{i\in[L,R]}{a_i}*[R-L+1])\)

(雾)

区间求和问题啥的考虑主席树,首先我不会证明复杂度,是因为我菜/kk

还是一样的套路 讨论 \([1,x]\)

对于区间求 \(\sum_{i\in[L,R]}[a_i<=ans]\)

\([ans\)初值是1\(]\)

显然此时 \([1,ans-1]\) 都可以表示出来 所以考虑扩大区间使得这个\(res = \sum_{i\in[L,R]}[a_i<=ans]\)

如果值比 \(ans\) 小肯定是不可以构成 \(ans+1\) 的 所以无需扩展…

#include<bits/stdc++.h>

using ll = long long ;
using namespace std ; int read() {
int x = 0 , f = 1 ; char c = getchar() ;
while(c < '0' || c > '9') { if(c == '-') f = -1 ; c = getchar() ; }
while(c >= '0' && c <= '9') { x = (x << 1) + (x << 3) + (c & 15) ; c = getchar() ; }
return x * f ;
} const int N = 1e5 + 10 ;
const int MAXN = N << 5 ;
const int INF = 1e9 ;
int n , a[N] , rt[N] , ls[MAXN] , rs[MAXN] , sum[MAXN] , cnt = 0 ;
void upd(int pre , int & o , int l , int r , int pos , int val) {
ls[o = ++ cnt] = ls[pre] ; rs[o] = rs[pre] ; sum[o] = sum[pre] + val ;
if(l == r) return ; int mid = l + r >> 1 ;
if(pos <= mid) upd(ls[pre] , ls[o] , l , mid , pos , val) ;
else upd(rs[pre] , rs[o] , mid + 1 , r , pos , val) ;
}
int query(int a , int b , int l , int r , int L , int R) {
if(a <= l && r <= b) return (sum[R] - sum[L]) ;
int mid = l + r >> 1 , ans = 0 ;
if(a <= mid) ans += query(a , b , l , mid , ls[L] , ls[R]) ;
if(b > mid) ans += query(a , b , mid + 1 , r , rs[L] , rs[R]) ;
return ans ;
}
signed main() {
n = read() ;
for(int i = 1 ; i <= n ; i ++) a[i] = read() ;
for(int i = 1 ; i <= n ; i ++) upd(rt[i - 1] , rt[i] , 1 , INF , a[i] , a[i]) ;
int m = read() ;
while(m --) {
int L = read() , R = read() , ans = 1 ;
while(1) {
int res = query(1 , ans , 1 , INF , rt[L - 1] , rt[R]) ;
if(res >= ans) ans = res + 1 ;
else break ;
}
printf("%d\n" , ans) ;
}
return 0 ;
}

[[FJOI2016]神秘数][主席树]的更多相关文章

  1. P4587 [FJOI2016]神秘数(主席树)

    题意:给出1e5个数 查询l,r区间内第一个不能被表示的数 比如1,2,4可以用子集的和表示出[1,7] 所以第一个不能被表示的是8 题解:先考虑暴力的做法 把这个区间内的数字按从小到大排序后 从前往 ...

  2. LUOGU P4587 [FJOI2016]神秘数(主席树)

    传送门 解题思路 如果区间内没有\(1\),那么答案就为\(1\),从这一点继续归纳.如果区间内有\(x\)个\(1\),设区间内\([2,x+1]\)的和为\(sum\),如果\(sum=0\),那 ...

  3. BZOJ 4408: [Fjoi 2016]神秘数 [主席树]

    传送门 题意: 一个可重复数字集合S的神秘数定义为最小的不能被S的子集的和表示的正整数.例如S={1,1,1,4,13},8无法表示为集合S的子集的和,故集合S的神秘数为8.现给定n个正整数a[1]. ...

  4. 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 = ...

  5. 【bzoj4408】[Fjoi 2016]神秘数 主席树

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

  6. BZOJ 4408: [Fjoi 2016]神秘数 主席树 + 神题

    Code: #include<bits/stdc++.h> #define lson ls[x] #define mid ((l+r)>>1) #define rson rs[ ...

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

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

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

    (bzoj4408)[FJOI2016]神秘数(可持久化线段树) bzoj luogu 对于一个区间的数,排序之后从左到右每一个数扫 如果扫到某个数a时已经证明了前面的数能表示[1,x],那么分情况: ...

  9. 【LG4587】[FJOI2016]神秘数

    [LG4587][FJOI2016]神秘数 题面 洛谷 题解 首先我们想一想暴力怎么做 对于一段区间\([l,r]\) 我们先将它之间的数升序排序 从左往右扫, 设当前我们可以表示出的数为\([1,x ...

随机推荐

  1. 题解【[AHOI2013]作业】

    \[ \texttt{Preface} \] 数据貌似很水,据说 \(A_i\leq n\) ,连离散化都不需要. 不知道为啥设块大小为 \(\frac{n}{\sqrt m}\) 会一直 Runti ...

  2. 记一次MySQL中Waiting for table metadata lock的解决方法

    最近项目中的数据库查询经常挂起,应用程序启动后也报操作超时.测试人员就说数据库又挂了(貌似他们眼中的连接失败,查询无果都是挂了),通过 show processlist 一看,满屏都是 Waiting ...

  3. centos6.5安装openLDAP2.3

    查看系统版本,内核,定时任务同步时间,关闭防火墙selinux等 [root@ldap-master ~]# cat /etc/redhat-release CentOS release 6.5 (F ...

  4. JVM性能优化系列-(6) 晚期编译优化

    6. 晚期编译优化 晚期编译优化主要是在运行时做的一些优化手段. 6.1 JIT编译器 在部分的商用虚拟机中,java程序最初是通过解释器(Interpreter) 进行解释执行的,当虚拟机发现某个方 ...

  5. 【STM32H7教程】第61章 STM32H7的MDMA基础知识和HAL库API

    完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第61章       STM32H7的MDMA基础知识和HAL ...

  6. Python面试(网编+数据库)

    第一部分 必答题 简述 OSI 7层模型及其作用?(2分) 应用层:与用户直接交互,软件.网站等 表示层:使用软件.网站可以查看的数据,图片等 会话层:保持登录状态,电脑中为cookie 传输层:选择 ...

  7. BOS只读状态修改

    update T_META_OBJECTTYPE set FSUPPLIERNAME ='PAEZ',FPACKAGEID =null

  8. (好题)POJ3057

    二分+二分图匹配+BFS 题意: 墙壁“X”,空区域(都是人)“.”, 门“D”. 人向门移动通过时视为逃脱,门每秒能出去一个人,人可以上下左右移动,墙阻止移动. 求最优移动方案下,最后一个人逃脱的最 ...

  9. for循环嵌套练习题or99乘法表

    //输出1-10之间的和 public static void whileTest(){ //定义变量用于存储不断变化的和 int sum = 0; //定义变量,用于记录不断变化的被加数 int x ...

  10. JS笔记之第二天

    一元运算符:++  -- 分为前++和后++ and 前--和后-- 如果++在后面,如:num++ +10参与运算,先参与运算,自身再加1 如果++在前面,如:++num+10参与运算,先自身加1, ...