CSU 1554SG Value 动态维护最小不可组成的数
来源:互联网 发布:竹解心虚,然后知不足 编辑:程序博客网 时间:2024/05/29 12:47
题目链接:点击打开链接
题意:
n个操作
1 val 在集合中插入val
2 查询当前集合 通过任意数求和不能得到的最小正整数
思路:
空集合时ans=1
且插入数字后ans只能增加,所以维护这个ans
ans是 a1+a2+a3···+ai < ans < ai+1 的最小的i
所以ans是最小的前缀和+1且<ai+1
用multiset记录ai+1 ··an
插入的数<=ans时才会更新答案,所以复杂度是nlogn
证明:
首先我们设这个最小不能组成的数为ans,则空集合时ans = 1
而且随着数字的插入,ans是只增不减的。
假设当前我们不能组成的最小数字是ans,则[1,ans) 都是能组成的。
当我们插入一个数num 时:
假设插入前能组成的区间是 [0,ans)
增加num,这个区间偏移量就是num,能组成的区间=>[num, ans+num)
当且仅当[0,ans) 和 [num, ans+num) 能拼接时,答案才会增加 => 当num<=ans 时答案才会增加。
则答案会更新为新区间的右端点=>ans = ans+num;
若不能拼接,则不会增加答案,所以就把这个数存起来。
每次更新完答案,我们把存起来的数中最小的拿出来,看一下能否再次更新答案,直到最小的数也不能更新答案为止。
#include <cstdio>#include <iostream>#include <cstring>#include <queue>#include <algorithm>#include <map>#include <cmath>#include <set>template <class T>inline bool rd(T &ret) {char c; int sgn;if(c=getchar(),c==EOF) return 0;while(c!='-'&&(c<'0'||c>'9')) c=getchar();sgn=(c=='-')?-1:1;ret=(c=='-')?0:(c-'0');while(c=getchar(),c>='0'&&c<='9') ret=ret*10+(c-'0');ret*=sgn;return 1;}template <class T>inline void pt(T x) { if (x <0) { putchar('-'); x = -x; } if(x>9) pt(x/10); putchar(x%10+'0');}using namespace std;typedef long long ll;int n;ll ans;multiset<ll>s;multiset<ll>::iterator it;int main() { while(cin>>n){ s.clear(); int op; ll val; ans = 1;while(n-->0){rd(op);if(op == 2) pt(ans), putchar('\n');else {rd(val);if(val <= ans){ans += val;while((int)s.size()){it = s.begin();if(ans>=(*it)){ans += *it;s.erase(it);}else break;}}elses.insert(val);}} } return 0;}/*9921 321 221 121 729921 121 221 421 72*/
0 0
- CSU 1554SG Value 动态维护最小不可组成的数
- csu 1554: SG Value
- math --- CSU 1554: SG Value
- CSU 1554 SG Value —— 思维
- 正数数组的最小不可组成和
- 正整数数组的最小不可组成和
- 数组中组成最小的数
- 将数组组成最小的数
- 【数组】【DP】数组的最小不可组成和
- [编程题] 求正数数组的最小不可组成和
- 求正数数组的最小不可组成和
- 其他题目---正数数组的最小不可组成和
- hdu4104-N个数不能组成的最小的数
- 把数组中的数字拼接起来组成最小的数
- SG Value
- 求正数数组的最小不可组成和(近似背包问题)
- 动态规划之不同数字组成数的数量
- HBase Key-Value的组成
- 设计模式之--State模式
- 输入挂(数据输入加速)
- Hadoop——创建文件夹
- Python学习:PyCharm 使用简介(转)
- Quick-3.3绑定自定义C++类(二)生成并使用tolua++工具
- CSU 1554SG Value 动态维护最小不可组成的数
- Java NIO系列教程(一) Java NIO 概述
- 第四周项目:指向学生类的指针
- LINUX 使用top 查看动态进程
- 【hadoop】 4001-Partitioner编程
- 【操作系统】——PV操作
- 自己写的socket 多线程 通讯
- 倒排索引构建算法BSBI和SPIMI
- Spring入门4--Resource