uva 11136 - Hoax or what
用两个优先队列来实现,因为队列只能从一头出去;
所以维护一个数组,来标记这个队列的已经出列而另外一个队列没有出列的元素;
到时候再把他们删了就行;
#include<cstdio>
#include<queue>
#include<cstring>
#define maxn 1000009
using namespace std; priority_queue<int,vector<int>,greater<int> >gq;
priority_queue<int,vector<int>,less<int> >lq;
int numg[maxn],numl[maxn];
int main()
{
int n,x,k;
while(scanf("%d",&n)&&n)
{
memset(numl,,sizeof numl);
memset(numg,,sizeof numg);
long long ans=;
while(!gq.empty())gq.pop();
while(!lq.empty())lq.pop();
for(int i=;i<n;i++)
{
scanf("%d",&k);
while(k--)
{
scanf("%d",&x);
gq.push(x);
lq.push(x);
}
while()
{
if(numg[lq.top()]>)
{
numg[lq.top()]--;
lq.pop();
}
else break;
}
while()
{
if(numl[gq.top()]>)
{
numl[gq.top()]--;
gq.pop();
}
else break;
}
numg[gq.top()]++;
numl[lq.top()]++;
ans+=lq.top()-gq.top();
gq.pop();
lq.pop();
}
printf("%lld\n",ans);
}
return ;
}
还可以用multiset来做;
代码:
#include<cstdio>
#include<set>
using namespace std; multiset<int>s; int main()
{
int n,k,x;
while(scanf("%d",&n)&&n)
{
long long ans=;
s.clear();
while(n--)
{
scanf("%d",&k);
while(k--)
{
scanf("%d",&x);
s.insert(x);
}
multiset<int>::iterator it;
it=s.begin();
int mi=*it;
s.erase(it);
it=s.end();
it--;
int ma=*it;
s.erase(it);
ans+=ma-mi;
}
printf("%lld\n",ans);
}
return ;
}
uva 11136 - Hoax or what的更多相关文章
- UVA 11136 - Hoax or what (可以提交了,不会Submission error了)
看题传送门:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem ...
- set UVA 11136 Hoax or what
题目传送门 题意:训练指南P245 分析:set维护,查询删除最大最小值 #include <bits/stdc++.h> using namespace std; typedef lon ...
- UVA 11136 Hoax or what (multiset)
题目大意: 超时进行促销.把账单放入一个箱子里 每次拿取数额最大的和最小的,给出 最大-最小 的钱. 问n天总共要给出多少钱. 思路分析: multiset 上直接进行模拟 注意要使用long lo ...
- UVa 11136 Hoax or what (STL)
题意:有 n 天,每天有m个数,开始的前一天没有数据,然后每天从这个里面拿出一个最大的和最小的,求 n 天的最大的和最小的差值相加. 析:一看就知道用set啊,多简单的STL,不过要注意,开long ...
- Hoax or what UVA - 11136(multiset的应用)
刚开始把题意理解错了,结果样例没过,后来发现每天只处理最大和最小的,其余的不管,也就是说昨天的元素会影响今天的最大值和最小值,如果模拟的话明显会超时,故用multiset,另外发现rbegin()的功 ...
- 知识点总结——STL相关(持续补充)
---恢复内容开始--- C++ STL 与ACM竞赛相关的应用 1.vector vector是动态数组,可以理解为是能够根据需要随时申请内存的动态数组. 常用操作如下: 容量 vec.size() ...
- uva 1354 Mobile Computing ——yhx
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAABGcAAANuCAYAAAC7f2QuAAAgAElEQVR4nOy9XUhjWbo3vu72RRgkF5
- UVA 10564 Paths through the Hourglass[DP 打印]
UVA - 10564 Paths through the Hourglass 题意: 要求从第一层走到最下面一层,只能往左下或右下走 问有多少条路径之和刚好等于S? 如果有的话,输出字典序最小的路径 ...
- UVA 11404 Palindromic Subsequence[DP LCS 打印]
UVA - 11404 Palindromic Subsequence 题意:一个字符串,删去0个或多个字符,输出字典序最小且最长的回文字符串 不要求路径区间DP都可以做 然而要字典序最小 倒过来求L ...
随机推荐
- [D3] 8. Margins
If you want ot add margins, should append graphics container in svg var svg = d3.select('#chartArea' ...
- GCC 编绎选项 转
gcc提供了大量的警告选项,对代码中可能存在的问题提出警告,通常可以使用-Wall来开启以下警告: -Waddress -Warray-bounds (only with -O2) ...
- 基于VMware为CentOS 6.5配置两个网卡
为CentOS 6.5配置两块网卡,一块是eth0,一块是eth1,下面以master为例 1.选择“master”-->“编辑虚拟机设置”,如下所示 2.单击“添加”,如下 3.选择“网络适配 ...
- VC++中 wstring和string的互相转换实现
在VC++开发中,经常会用到string和wstring,这就需要二者之间的转换,项目中封装了wstring和string相互转换的2个函数,实现如下: //将wstring转换成string std ...
- skip-grant-tables
1.net stop mysql 2.my.ini中[mysqld]plugin_dir的下面增加skip-grant-tables 3.net start mysql 4.在Navicat中打开my ...
- js--小结①
- H TML5 之 (5) 一个在线画图板
这里加入了点难度了,增加了对HTML很多时间的把握,对象的把握 index.html <!DOCTYPE HTML> <html> <head> <title ...
- Oracle常用几种Sql用法
前几天客户提出一个月报,经过了解需求及公式等过程长达20小时,总算基本模型出来了,贴出来啥晒,对于我这种菜鸟来说也算小有提高,虽然Sql语句不是很庞大,但是里面涉及到了几种算法,个人觉得还是经常能用到 ...
- .NET 统一用户管理 -- 单点登录
单点登录 前言 本篇做为.Net 统一用户管理的系列文章的开山之作,主要说一个单点登录是怎么实现的,以及为啥要统一用户管理. 单点登录(Single Sign On),简称为 SSO,是目前比较流行的 ...
- c++ 中关于int,unsigned int , short的关系与应用
转载:http://www.cppblog.com/xyjzsh/archive/2010/10/20/130554.aspx?opt=admin int类型比较特殊,具体的字节数同机器字长和编译 ...