UVA 11136 Hoax or what (multiset)】的更多相关文章

题目大意: 超时进行促销.把账单放入一个箱子里 每次拿取数额最大的和最小的,给出 最大-最小  的钱. 问n天总共要给出多少钱. 思路分析: multiset 上直接进行模拟 注意要使用long long  并且multiset的删除要用 迭代器. #include <iostream> #include <cstdio> #include <queue> #include <cstring> #include <set> #define max…
看题传送门:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=2077 这题交上去以前一直Submission error .拿别人的AC代码也一样. 现在可以提交了~原来的代码就是对的^ ^ (2013/10/23) 用到了multiset ,不是set哦,set不允许元素重复,而multiset 允许. 12543742 11136 Hoa…
题目传送门 题意:训练指南P245 分析:set维护,查询删除最大最小值 #include <bits/stdc++.h> using namespace std; typedef long long ll; int main(void) { int n; multiset<int> S; while (scanf ("%d", &n) == 1) { if (!n) break; S.clear (); ll ans = 0; for (int m,…
用两个优先队列来实现,因为队列只能从一头出去: 所以维护一个数组,来标记这个队列的已经出列而另外一个队列没有出列的元素: 到时候再把他们删了就行: #include<cstdio> #include<queue> #include<cstring> #define maxn 1000009 using namespace std; priority_queue<int,vector<int>,greater<int> >gq; pri…
题意:有 n 天,每天有m个数,开始的前一天没有数据,然后每天从这个里面拿出一个最大的和最小的,求 n 天的最大的和最小的差值相加. 析:一看就知道用set啊,多简单的STL,不过要注意,开long long,和multiset,因为可能数是一样. 代码如下: #include <iostream> #include <cmath> #include <cstdlib> #include <set> #include <cstdio> using…
刚开始把题意理解错了,结果样例没过,后来发现每天只处理最大和最小的,其余的不管,也就是说昨天的元素会影响今天的最大值和最小值,如果模拟的话明显会超时,故用multiset,另外发现rbegin()的功能,收获蛮多的. #include<iostream> #include<set> #include<cstdio> #include<algorithm> using namespace std; multiset<int> s; int main…
本题利用multiset解决.根据题意,如果我们用P(x,y)表示一个人,因为人可以相同,所以用multiset.我们会发现,如果所有人群都是有优势的,那么这些点呈现一个递减的趋势.如果刚刚插入一个人,他是否有优势该如何判断呢?只需要看他左边相邻的点的y坐标是否比他小即可.而如果这个人是有优势的,那么需要先把这个人插入到集合中,然后从upper_bound(P)开始,逐个删除没有优势的点,注意删除时候应写为s.erase(it++),因为删除时候会导致指针向左移动一位,因此还需要it++.这样,…
---恢复内容开始--- C++ STL 与ACM竞赛相关的应用 1.vector vector是动态数组,可以理解为是能够根据需要随时申请内存的动态数组. 常用操作如下: 容量 vec.size()    向量大小 vec.empty() 向量判空 (如果为空==true.不为空==false) 修改 vec.push_back()   向向量末尾添加一个元素 vec.pop_back()   删除向量末尾元素 vec.insert()     向向量中任意位置插入元素 vec.erase()…
题目传送门 题意:训练指南P228 分析:照着书上的做法,把点插入后把它后面不占优势的点删除,S.size ()就是优势的人数,时间复杂度O (nlogn) #include <bits/stdc++.h> using namespace std; struct Point { int a, b; Point() {} Point(int a, int b) : a (a), b (b) {} bool operator < (const Point &r) const { re…
题意:有n个人,每个人有x.y两个属性,每次输入一个人(x,y).如果当前不存在一个人(x`,y`)的属性满足x`<=x,y`<y或者x`<x,y`<=y,就说这个人是有优势的.每次输入时要求输出当前有多少个人是有优势的. 思路:平衡二叉树. 一个人一旦失去优势就再也不可能得到优势.可以用multiset来存优势人群(因为可能出现x和y完全相同的人).对于每次输入的人,二分寻找第一个满足?<=x的人,记为(x`,y`),如果y>=y`,那么该人是没有优势的,可以忽略.其…