MZ Training 2014 #6 D题
2014-10-09 16:09
225 查看
这个题我看到就晓得是要用优先队列来做的。。。好佩服我的感觉
但是还是WA一次,T一次。。。因为其实是要用两个优先队列,一个小——>大(小顶堆),一个大——>小(大顶堆)。
在每次输出操作之前呢,我们把能加入队列的数全部扔进小顶堆;不是要求第i小吗?每次扔数过后,不断地取小顶堆堆顶把大顶堆里的元素补满至i个即可。
!!!注意!每次这里操作后,一定要检查大顶堆堆顶是否比小顶堆堆顶小(要保证大顶堆堆顶就是第i小的数),否则交换入队。
然后输出大顶堆堆顶即可。<span style="color:#3366ff;background-color: rgb(255, 255, 102);">#include<cstdio>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<queue>
using namespace std;
int n, m, a[30010];
int last,i;
priority_queue<int> daduilie;
priority_queue<int, vector<int>, greater<int> > xiaoduilie;
int main()
{
memset(a,0,sizeof(a));
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++) scanf("%d",&a[i]);
last=0;
i=0;
while(m--)
{
i++;
int q;
scanf("%d",&q);
for(int j=++last;j<=q;j++) xiaoduilie.push(a[j]);
while(daduilie.size()<i)
{
daduilie.push(xiaoduilie.top());
xiaoduilie.pop();
}
while(xiaoduilie.size()>0 && daduilie.top()>xiaoduilie.top())
{
int x1=daduilie.top();
daduilie.pop();
int x2=xiaoduilie.top();
xiaoduilie.pop();
xiaoduilie.push(x1);
daduilie.push(x2);
}
printf("%d\n",daduilie.top());
last=q;
}
return 0;
}</span>秦导师是哲学家啊~~~ ~~(≧▽≦)/~
但是还是WA一次,T一次。。。因为其实是要用两个优先队列,一个小——>大(小顶堆),一个大——>小(大顶堆)。
在每次输出操作之前呢,我们把能加入队列的数全部扔进小顶堆;不是要求第i小吗?每次扔数过后,不断地取小顶堆堆顶把大顶堆里的元素补满至i个即可。
!!!注意!每次这里操作后,一定要检查大顶堆堆顶是否比小顶堆堆顶小(要保证大顶堆堆顶就是第i小的数),否则交换入队。
然后输出大顶堆堆顶即可。<span style="color:#3366ff;background-color: rgb(255, 255, 102);">#include<cstdio>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<queue>
using namespace std;
int n, m, a[30010];
int last,i;
priority_queue<int> daduilie;
priority_queue<int, vector<int>, greater<int> > xiaoduilie;
int main()
{
memset(a,0,sizeof(a));
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++) scanf("%d",&a[i]);
last=0;
i=0;
while(m--)
{
i++;
int q;
scanf("%d",&q);
for(int j=++last;j<=q;j++) xiaoduilie.push(a[j]);
while(daduilie.size()<i)
{
daduilie.push(xiaoduilie.top());
xiaoduilie.pop();
}
while(xiaoduilie.size()>0 && daduilie.top()>xiaoduilie.top())
{
int x1=daduilie.top();
daduilie.pop();
int x2=xiaoduilie.top();
xiaoduilie.pop();
xiaoduilie.push(x1);
daduilie.push(x2);
}
printf("%d\n",daduilie.top());
last=q;
}
return 0;
}</span>秦导师是哲学家啊~~~ ~~(≧▽≦)/~
相关文章推荐
- MZ Training 2014 #6 A题
- MZ Training 2014 #6 B题
- MZ Training 2014 #6 C题
- MZ Training 2014 #5 D题
- MZ Training 2014 #8 F题
- MZ Training 2014 #5 E题
- MZ Training 2014 #4 B题
- 2014百度之星复赛解题报告: FindNumbers
- SQL 2014新功能介绍系列9 - AlwaysOn 可用性组
- SQL Service 2014安装
- Zepto Code Rush 2014 A. Feed with Candy
- Noip 2014 days1 生活大爆炸版 石头剪刀布
- SSL 3.0 POODLE攻击信息泄露漏洞(CVE-2014-3566)
- 微软2014实习生在线测试题:K-th String
- Good Bye 2014 B. New Year Permutation
- 数据结构《21》----2014 WAP 初试题----Immutable queue
- 以ScaleIO 1.30为后端存储运行微软服务器软件SQL Server 2014, SharePoint 2013, Exchange 2013的解决方案
- 【APIO2014】UOJ103 Palindromes【解法一】
- 老徐2014-你害人不浅......