明白之后 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\) 的 所以无需扩展…

  1. #include<bits/stdc++.h>
  2. using ll = long long ;
  3. using namespace std ;
  4. int read() {
  5. int x = 0 , f = 1 ; char c = getchar() ;
  6. while(c < '0' || c > '9') { if(c == '-') f = -1 ; c = getchar() ; }
  7. while(c >= '0' && c <= '9') { x = (x << 1) + (x << 3) + (c & 15) ; c = getchar() ; }
  8. return x * f ;
  9. }
  10. const int N = 1e5 + 10 ;
  11. const int MAXN = N << 5 ;
  12. const int INF = 1e9 ;
  13. int n , a[N] , rt[N] , ls[MAXN] , rs[MAXN] , sum[MAXN] , cnt = 0 ;
  14. void upd(int pre , int & o , int l , int r , int pos , int val) {
  15. ls[o = ++ cnt] = ls[pre] ; rs[o] = rs[pre] ; sum[o] = sum[pre] + val ;
  16. if(l == r) return ; int mid = l + r >> 1 ;
  17. if(pos <= mid) upd(ls[pre] , ls[o] , l , mid , pos , val) ;
  18. else upd(rs[pre] , rs[o] , mid + 1 , r , pos , val) ;
  19. }
  20. int query(int a , int b , int l , int r , int L , int R) {
  21. if(a <= l && r <= b) return (sum[R] - sum[L]) ;
  22. int mid = l + r >> 1 , ans = 0 ;
  23. if(a <= mid) ans += query(a , b , l , mid , ls[L] , ls[R]) ;
  24. if(b > mid) ans += query(a , b , mid + 1 , r , rs[L] , rs[R]) ;
  25. return ans ;
  26. }
  27. signed main() {
  28. n = read() ;
  29. for(int i = 1 ; i <= n ; i ++) a[i] = read() ;
  30. for(int i = 1 ; i <= n ; i ++) upd(rt[i - 1] , rt[i] , 1 , INF , a[i] , a[i]) ;
  31. int m = read() ;
  32. while(m --) {
  33. int L = read() , R = read() , ans = 1 ;
  34. while(1) {
  35. int res = query(1 , ans , 1 , INF , rt[L - 1] , rt[R]) ;
  36. if(res >= ans) ans = res + 1 ;
  37. else break ;
  38. }
  39. printf("%d\n" , ans) ;
  40. }
  41. return 0 ;
  42. }

[[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. 20200120--python学习第12天

    今日内容 函数中高级(闭包/高价函数) 内置函数 内置模块(.py文件) 内容回顾 函数基础概念 a.函数基本结构 def func(arg): return arg v1 = func(123) b ...

  2. 数据算法 --hadoop/spark数据处理技巧 --(11.K-均值聚类 12. k-近邻)

    十一.k-均值聚类 这个需要MR迭代多次. 开始时,会选择K个点作为簇中心,这些点成为簇质心.可以选择很多方法啦初始化质心,其中一种方法是从n个点的样本中随机选择K个点.一旦选择了K个初始的簇质心,下 ...

  3. U盘模式无法引导进入pe系统

        有些笔记本.一体机 特别是win8.win10系统维护时需要 通过u盘进入pe系统,就是进不去,需要到bios中更改一下设置.            1.首先我们将已经使用u启动u盘启动盘制作 ...

  4. Angular目录结构

    一. Angular目录结构 e2e:在e2e/下是端到端测试 node_modules:安装的第三方模块都在这,使用npm install安装的1 Src:我们项目的所有文件 { App:组件,以a ...

  5. Red Team 指南--第2章开源情报(OSINT)侦察

    第2章开源情报(OSINT)侦察 贡献者:伊恩·巴维斯翻译:BugMan 哇,慢点牛仔吧!在我们深入探讨“做性感时光”(笑话)红队闻名的黑客冒险,还有一些作业要做.五分之一的专业人士从未学习或做过任何 ...

  6. Blazor client-side Preview 预览版 如何调试 Debug

    首先我们使用最简单的模板案例,里面有一个Counter计数器,你可以在创建模板中找到. 首先需要设置运行调试方式为IIS Express.这意味着,MAC可能不能使用调试. 然后开启运行而不调试(Ct ...

  7. ASPNetCore 发布到IIS

    ASPNetCore 发布到IIS 准备工作 1.1.  安装IIS.(具体操作不再说明) 安装成功后再浏览器输入localhost得到的页面如下 1.2.  安装dotnet-hosting-2.2 ...

  8. 目前最全的Python的就业方向

    Python是一门面向对象的编程语言,编译速度超快,从诞生到现在已经25个年头了.它具有丰富和强大的库,常被称为“胶水语言”,能够把用其他语言编写的各种模块(尤其是C/C++)很轻松地联结在一起.其特 ...

  9. Mysql:初识MySQL

    转载自:https://www.cnblogs.com/hellokuangshen/archive/2019/01/09/10246029.html Mysql:初识MySQL 只会写代码的是码农: ...

  10. C#24种设计模式汇总

    创建型:6 01. 简单工厂模式 08. 工厂方法模式 09. 原型模式 13. 建造者模式 15. 抽象工厂模式 21. 单例模式 结构型:7 06. 装饰模式 07. 代理模式 12. 外观模式 ...