浅谈主席树:https://www.cnblogs.com/AKMer/p/9956734.html

题目传送门:https://www.lydsy.com/JudgeOnline/problem.php?id=4408

我们先把问题简化,给你一个可重集,求最小的不能被凑出来的正整数。

性质一:假设原集合可以把\([1,num]\)全部凑出来,新加入一个数字\(x\),就可以凑出\([1,num+x]\)

证明:显然。

性质二:如果你已经可以凑出\([1,num_1]\),当前集合里权值在\([1,num_1]\)里的所有数的权值和为\(num_2\),那么你就可以凑出\([1,num_2]\)。

证明:因为性质一。

性质三:如果你由\([1,num_1]\)得到了\([1,num_2]\)且\(num_2>num_1\),然后由\([1,num_2]\)得到了\([1,num_3]\)且\(num_3> num_2\),那么\(num_3\geqslant2*num_1\)。

证明:因为由\(num_2\)转到\(num_3\),增加的数字必然在\([num_1,num_2]\)内,所以\(num_3\geqslant num_1+num_1\)。

因为这两条性质,我们可以将最小的不能凑出的数不断变大,而且是成倍增长的。先钦点不能凑出的数字为\(1\),然后根据性质二不断变大,时间是\(60*logn\)的。

时间复杂度:\(O(60*mlogn)\)

空间复杂度:\(O(nlogn)\)

代码如下:

#include <cstdio>
using namespace std;const int maxn=1e5+5;int n,m,sum;
int a[maxn],rt[maxn];int read() {int x=0,f=1;char ch=getchar();for(;ch<'0'||ch>'9';ch=getchar())if(ch=='-')f=-1;for(;ch>='0'&&ch<='9';ch=getchar())x=x*10+ch-'0';return x*f;
}struct tree_node {int sum,cnt,ls,rs;
};struct chairman_tree {int tot;tree_node tree[maxn*35];void ins(int lst,int &now,int l,int r,int pos) {now=++tot;tree[now]=tree[lst];tree[now].cnt++;tree[now].sum+=pos;if(l==r)return;int mid=(l+r)>>1;if(pos<=mid)ins(tree[lst].ls,tree[now].ls,l,mid,pos);else ins(tree[lst].rs,tree[now].rs,mid+1,r,pos);}int query(int x,int y,int l,int r,int pos) {if(r<=pos)return tree[y].sum-tree[x].sum;int mid=(l+r)>>1,res=tree[tree[y].ls].sum-tree[tree[x].ls].sum;if(pos<=mid)res=query(tree[x].ls,tree[y].ls,l,mid,pos);else res+=query(tree[x].rs,tree[y].rs,mid+1,r,pos);return res;}
}T;int main() {n=read();for(int i=1;i<=n;i++) {a[i]=read();sum+=a[i];}for(int i=1;i<=n;i++)T.ins(rt[i-1],rt[i],1,sum,a[i]);m=read();for(int i=1;i<=m;i++) {int l=read(),r=read(),cnt=1;while(cnt<sum) {int tmp=T.query(rt[l-1],rt[r],1,sum,cnt);if(tmp<cnt)break; else cnt=tmp+1;//cnt就是题解里讲的num}printf("%d\n",cnt);}return 0;
}

转载于:https://www.cnblogs.com/AKMer/p/9971824.html

BZOJ4408:[FJOI2016]神秘数相关推荐

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

    题目: 我是超链接 题解: 如果[1,x]可以取到,我们加入一个数y,如果y<=x+1,那么我们有新的取数集合[1,x+y]:如果y>x+1,那么x+1还是取不到啊,这样我们就有了一个暴力 ...

  2. 【FJOI2016】【BZOJ4408】神秘数

    [题目链接] BZOJ4408(权限题) [前置技能] 主席树 [题解] 首先先考虑一种时间复杂度为O(QNlogN)O(QNlogN)O(QNlogN)的暴力做法:将所有数按从小到大排序,考虑做到第 ...

  3. bzoj 4408: [FJOI2016]神秘数 主席树

    先看一下对于给定的一段如何暴力求最大值,首先将这一段排序,然后如果存在某一个数,这个数比它前面的数的前缀和至少大2,那么答案就是它前面那个数的前缀和+1. 那么假设现在处理了前面较小的一些数之后的答案 ...

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

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

  5. [Bzoj4408]神秘数(主席树)

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

  6. 【bzoj4408】[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 = ...

  7. ●BZOJ 4408 [Fjoi 2016]神秘数

    题链: http://www.lydsy.com/JudgeOnline/problem.php?id=4408 题解: 主席树 首先,对于一些数来说, 如果可以我们可以使得其中的某些数能够拼出 1- ...

  8. 4408: [Fjoi 2016]神秘数

    4408: [Fjoi 2016]神秘数 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 452  Solved: 273 [Submit][Stat ...

  9. BZOJ44084299[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 = ...

最新文章

  1. 无责任Windows Azure SDK .NET开发入门(二):使用Azure AD 进行身份验证
  2. Python语言学习:python语言的特点、入门、基础用法之详细攻略
  3. 一步一步写算法(之寻找丢失的数)
  4. 10.Partial Dependence Plots
  5. Android音视频之AudioRecord录音(一)
  6. 计算机配置型号及主要技术指标,显卡性能看什么参数(新手必备的显卡性能知识全解)...
  7. 使用Python判断文件是否为PE文件
  8. PHP ctf addslashes,[红日安全]代码审计Day13 - 特定场合下addslashes函数的绕过
  9. js面向对象--理解闭包
  10. 关于SilverLight视频播放器
  11. tableau学生版注册流程
  12. Android代码查看Android版本
  13. 迅盘从入门到精通 彻底告别WIN7关机烦恼 T400亲测
  14. Shell 教程 - 菜鸟教程
  15. 夜神模拟器 Fiddler Tunnel to......443
  16. 基因家族鉴定分析实战操作手册
  17. 3.Orangepi PC2 使用busybox制作文件系统
  18. 5个提供flickr高级图片搜索的网站
  19. 经典语录大全微信小程序源码下载多种分类语录
  20. 百度飞桨小白逆袭大神之鲤鱼跃龙门

热门文章

  1. 小白也能读懂的 ZigBee 3.0 简介
  2. Kickstart无人值守安装
  3. mysql cache_Mysql 数据库缓存cache功能总结
  4. 云边端一体化技术白皮书
  5. STL--String类的常用功能复写
  6. 7-2 jmu-Java-03面向对象-06-继承覆盖综合练习-Person、Student、Employee、Company (15分)
  7. gittortoise使用ssh秘钥
  8. Python二手车价格预测(二)—— 模型训练及可视化
  9. A Multi-task Ensemble Framework for Emotion, Sentiment and Intensity Prediction
  10. steam登不上显示连接服务器错误,steam登陆网络连接错误代码的解决办法