博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
P2073 送花
阅读量:6560 次
发布时间:2019-06-24

本文共 1488 字,大约阅读时间需要 4 分钟。

我一看,这不是bst么?可是我是来刷noip的知识点的呀?

再一看,只需要输出全局最大最小。

猛然间,我想起了一个去世(假的)兄弟滑动窗口的做法。

他使用一个堆。只考虑对答案有影响的点。对堆中储存大小和位置。

如果堆顶元素的位置不在当前区间内,则一直弹出,知道堆为空或者位于当前区间内?

对答案没有影响的点,就让他烂在堆里。

这个题也可以这么做。只需要记录一下每个花的编号。

处理的时候是需要看是否被删除就可以了。

#include
#include
#include
#include
using std::priority_queue;const int maxn=1001000;struct node{ int p; int C; int W; node(int a=0,int b=0,int c=0){ p=a;C=b;W=c; } bool operator < (const node &a )const { return C>a.C; }};priority_queue
Max;priority_queue
Min;bool vis[maxn],alive[maxn];int main(){ int opt,c,w,tot=0; while(true) { tot++; scanf("%d",&opt); if(opt==1) { scanf("%d%d",&w,&c); if(vis[c]) continue; vis[c]=true; alive[tot]=true; node pas(tot,c,w); Min.push(pas); pas.C*=-1;Max.push(pas); } if(opt==2) { if(Max.empty()) continue; node pas=Max.top(); Max.pop(); while(!alive[pas.p]&&!Max.empty()) { pas=Max.top(); Max.pop(); } if(!alive[pas.p]) continue; pas.C*=-1; alive[pas.p]=false; vis[pas.C]=false; } if(opt==3) { if(Min.empty()) continue; node pas=Min.top(); Min.pop(); while(!alive[pas.p]&&!Min.empty()) { pas=Min.top(); Min.pop(); } if(!alive[pas.p]) continue; alive[pas.p]=false; vis[pas.C]=false; } if(opt==-1) break; } int totC=0,totW=0; while(!Min.empty()) { node pas=Min.top(); Min.pop(); if(!alive[pas.p]) continue; totC+=pas.C; totW+=pas.W; } printf("%d %d",totW,totC);}

转载于:https://www.cnblogs.com/Lance1ot/p/9877046.html

你可能感兴趣的文章
web学习方向
查看>>
A*算法实现
查看>>
第一周 从C走进C++ 002 命令行参数
查看>>
【java】itext pdf 分页
查看>>
看看这个电脑的配置
查看>>
[转]【NoSQL】NoSQL入门级资料整理(CAP原理、最终一致性)
查看>>
RequireJS进阶(二)
查看>>
我设计的网站的分布式架构
查看>>
linux extract rar files
查看>>
Knockout.Js官网学习(监控属性Observables)
查看>>
ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务解决
查看>>
azure之MSSQL服务性能测试
查看>>
Android BitmapFactory.Options
查看>>
前端构建:Less入了个门
查看>>
phonegap(cordova) 自己定义插件代码篇(三)----支付宝支付工具整合
查看>>
linux 批量进行:解压缩某一类压缩文件类型的文件
查看>>
激活modelsim se 10.4 时运行patch_dll.bat不能生成TXT
查看>>
17秋 软件工程 Alpha 事后诸葛亮会议
查看>>
线性空间
查看>>
疑似checkpoint堵塞数据库连接
查看>>