题目链接:http://acm.csu.edu.cn/csuoj/problemset/problem?pid=1554

Description

The SG value of a set (multiset) is the minimum positive integer that could not be constituted of the number in this set.
You will be start with an empty set, now there are two opertions:
1. insert a number x into the set;
2. query the SG value of current set.

Input

Input contains multiple test cases. Each test case starts with a number N (0 < N <= 1e5) -- the total number of opertions.
The next N lines contain one opertion each.
1 x means insert a namber x into the set;
2 means query the SG value of current set.

Output

For each query output the SG value of current set.

Sample Input

5
2
1 1
2
1 1
2

Sample Output

1
2
3

Hint

Source

题意:

  SG Value 是在这个集合里任意组合,不能组合成的最小的数。例:{1, 2}可以组成[1,3]的数,所以SG Value 是4。

  有两个操作。

  1)添加一个数进入集合

  2)找到当前集合中的SG Value。

题解:

  给你一个区间[L, R], 那么我们的sg value 就是 R+1。

  一开始我们的集合是[0,0], sg value 是 1。如果我们加入2,sg value 还是1。所以我们要加入的数要小于等于 sg value 区间范围才会改变。我们就需要排个序,从小到到找。

  而这题加入了一个添加操作,只需要用优先队列或者 multiset 来维护。

  {1, 2, 5},前两个来说可以组成[1,3], 就可以把他们删除掉。

优先队列  

 #include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <string>
#include <vector>
#include <map>
#include <set>
#include <queue>
#include <sstream>
#include <algorithm>
using namespace std;
#define pb push_back
#define mp make_pair
#define ms(a, b) memset((a), (b), sizeof(a))
//#define LOCAL
#define eps 0.0000001
typedef long long LL;
const int inf = 0x3f3f3f3f;
const int maxn = +;
const int mod = ;
int n;
void solve()
{
priority_queue<LL, vector<LL>, greater<LL> >q;
LL R = ;
for(int i=;i<n;i++){
int x;
scanf("%d", &x);
if(x==){
while(!q.empty() && q.top() <= R+1LL){
R= R+q.top();
q.pop();
}
printf("%lld\n", R+1LL);
}
else{
int v;
scanf("%lld", &v);
q.push(v);
}
}
}
int main()
{
#ifdef LOCAL
freopen("jumping.in", "r", stdin);
// freopen("output.txt", "w", stdout);
#endif // LOCAL
while(~scanf("%d", &n)){
solve();
}
return ;
}

multiset

 #include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <string>
#include <vector>
#include <map>
#include <set>
#include <queue>
#include <sstream>
#include <algorithm>
using namespace std;
#define pb push_back
#define mp make_pair
#define ms(a, b) memset((a), (b), sizeof(a))
//#define LOCAL
#define eps 0.0000001
typedef long long LL;
const int inf = 0x3f3f3f3f;
const int maxn = +;
const int mod = ;
int n;
void solve()
{
multiset <LL> q;
LL R = ;
for(int i=;i<n;i++){
int x;
scanf("%d", &x);
if(x==){
while(!q.empty() && *q.begin() <= R+1LL){
R= R+ *q.begin();
q.erase(q.begin());
}
printf("%lld\n", R+1LL);
}
else{
LL v;
scanf("%lld", &v);
q.insert(v);
}
}
}
int main()
{
#ifdef LOCAL
freopen("jumping.in", "r", stdin);
// freopen("output.txt", "w", stdout);
#endif // LOCAL
while(~scanf("%d", &n)){
solve();
}
return ;
}

总结:

  学到了一个multiset。是一个可以出现重复key的set。而且它的第一个数是最小值。(通过红黑二叉树实现的)

你努力的时候,比你厉害的人也在努力

CSU 1554 SG Value (multiset/priority queue 思维题)的更多相关文章

  1. 1554: SG Value (巧妙的模拟题,也属于思维题)

    1554: SG Value Submit Page    Summary    Time Limit: 5 Sec     Memory Limit: 256 Mb     Submitted: 4 ...

  2. find-median-from-data-stream & multiset priority queue 堆

    https://leetcode.com/problems/find-median-from-data-stream/ 这道题目实在是不错,所以单独拎出来. https://discuss.leetc ...

  3. csu 1554: SG Value 思维题

    http://acm.csu.edu.cn/csuoj/problemset/problem?pid=1554 这题在比赛的时候居然没想出来,然后发现居然是做过的题目的变种!!!! 先不考虑插入操作, ...

  4. CSU 1554 SG Value —— 思维

    题目链接:http://acm.csu.edu.cn/csuoj/problemset/problem?pid=1554 Description The SG value of a set (mult ...

  5. math --- CSU 1554: SG Value

    SG Value Problem's Link:   http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1554 Mean: 一个可重集合,初始为空,每 ...

  6. CSU 1554 SG Value (集合类的学习)

    题目大意: 2种操作 1 a:往集合中添加一个元素a 2: 询问这个集合中的元素任意组合相加所不能得到的最小数的值 这道题总是不断地去找当前所能处的最小值能否被当前的最小值加上其前部的一堆可抵达数到达 ...

  7. CSUOJ 1554 SG Value

    1554: SG Value Time Limit: 5 Sec  Memory Limit: 256 MBSubmit: 140  Solved: 35 Description The SG val ...

  8. STL-<queue>-priority queue的使用

    简介: 优先队列是一种容器适配器,优先队列的第一个元素总是最大或最小的(自定义的数据类型需要重载运算符).它是以堆为基础实现的一种数据结构. 成员函数(Member functions) (const ...

  9. 优先队列(Priority Queue)

    优先队列(Priority Queue) A priority queue must at least support the following operations: insert_with_pr ...

随机推荐

  1. python每日一练:0001题

    第 0001 题:做为 Apple Store App 独立开发者,你要搞限时促销,为你的应用生成激活码(或者优惠券),使用 Python 如何生成 200 个激活码(或者优惠券)? import o ...

  2. SpringBoot 使用maven创建springboot项目

    有两种方式可以创建  1是使用spring-boot-starter-parent ,2是使用spring-boot-dependencies (即父项目dependencyManagement) ( ...

  3. [Python3 填坑] 010 isalpha() 对于字母的定义

    目录 1. print( 坑的信息 ) 2. 开始填坑 官方文档 1. print( 坑的信息 ) 挖坑时间:2019/01/14 明细 坑的编码 内容 Py009-1 isalpha() 理当只有输 ...

  4. Error querying database. Cause: org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'ItemsCustom' in 'class com.pojo.OrderDetailCustom

    再用 junit 测试MyBatis时发现的错误: org.apache.ibatis.exceptions.PersistenceException: ### Error querying data ...

  5. 中标麒麟系统安装rpm文件

    打开终端,获得su权限. cd到rpm所在文件夹,输入指令,rpm -ivh rpm的名称

  6. 打乱一个排好序的 list 对象 alist?

    1. import random 2. random.shuffle(alist)

  7. GitHub上更新原有的项目代码(二)

    转载自:https://blog.csdn.net/dayewandou/article/details/79175783 项目上传了,现在又写了一些内容想要跟新到项目上去,怎么更新呢? 首先进入项目 ...

  8. js的事件流理解

    面试问到js的事件流,当时说的不是很清楚,现在觉得有必要把这个弄清楚. 事件捕获和事件冒泡 事件流描述的是从页面中接收事件的顺序,也可理解为事件在页面中传播的顺序. 事件流主要分为两种,即事件捕获和事 ...

  9. Python3实现文本预处理

    1.数据集准备 测试数据集下载:https://github.com/Asia-Lee/Vulnerability_classify/blob/master/testdata.xls 停用词过滤表下载 ...

  10. 02.Windows2012R2安装360安全卫士失败及无法卸载问题

    问题: Windows 2012 R2 安装360安全卫士失败及无法卸载,导致网络无法通信问题解决. 解决:1.进入 Windows2012R2 安全模式下:2.进行覆盖安装360安全卫士:3.覆盖安 ...