[bzoj4977]跳伞求生
来源:互联网 发布:java 包图 编辑:程序博客网 时间:2024/04/28 22:07
题目大意
有n个队友和m个敌人,每个队友有一个攻击力ai,每个敌人有攻击力bi和价值ci。你可以选择若干个队友,每个队友i去怼一个敌人j(i,j两两不同),当ai>bj时,你的队友可以对答案造成ai-bj+cj的贡献。问答案最大可以是多少。
n,m≤100000
分析
我首先往贪心方面想。
考虑把队友按a升序排序,敌人按b升序排序。然后枚举攻击力,开一个优先队列维护可以怼的敌人的c-b。然后对于一个对友,如果在队列里有人可以怼,那么把这个人删去并加上相应的答案,否则就换掉一个a最小的队友(显然可以)。
但是这样做会错,因为你求的是在选择的队友最多情况下的答案。有敌人c-b为负数时会错,这时应该舍弃掉一些敌人。
按照上面的方法可以跑出一个解,之后要做的是:把用到的队友和怼掉的敌人存下来,然后每次删掉a最小的队友和c-b最小的敌人,得到另一个解(这样删仍然合法,因为队友从小到大删不会产生不合法配对),并更新答案。
时间复杂度
#include <cstdio>#include <cstring>#include <algorithm>#include <queue>using namespace std;const int N=2e5+5;typedef long long LL;int n,m,h,t,D[N];LL ans,s;priority_queue <int> f;priority_queue <int,vector<int>,greater<int> > g;struct Data{ int x,y,typ;}A[N];bool operator < (const Data &a,const Data &b){ return a.x<b.x || a.x==b.x && a.typ<b.typ;}char c;int read(){ int x=0,sig=1; for (c=getchar();c<'0' || c>'9';c=getchar()) if (c=='-') sig=-1; for (;c>='0' && c<='9';c=getchar()) x=x*10+c-48; return x*sig;}int main(){ n=read(); m=read(); for (int i=0;i<n;i++) { A[i].x=read(); A[i].typ=0; } for (int i=0;i<m;i++) { A[n].x=read(); A[n].y=read()-A[n].x; A[n++].typ=1; } sort(A,A+n); h=1; for (int i=0;i<n;i++) { if (A[i].typ==1) f.push(A[i].y);else { if (f.empty()) { if (h<=t) { s+=A[i].x-D[h++]; D[++t]=A[i].x; } }else { s+=A[i].x+f.top(); g.push(f.top()); f.pop(); D[++t]=A[i].x; } } } ans=s; for (int i=h;i<=t;i++) { s-=g.top()+D[i]; ans=max(ans,s); g.pop(); } printf("%lld\n",ans); return 0;}
阅读全文
0 0
- [bzoj4977]跳伞求生
- bzoj 4977: 跳伞求生 线段树模拟费用流
- 跳伞集训
- 求生
- bzoj4977 -- 线段树模拟费用流
- 荒野求生
- 求生须知
- 荒岛求生
- 《荒岛求生》
- 高空跳伞者从迪拜塔跳下创纪录
- 美国一男子从移动电话基站跳伞死亡
- 正在6000米的高空跳伞,可是伞包打不开..
- 跳伞的时候,伞包拉不开,如何自救?在线等... ..
- HTML5跳伞游戏-看谁先安全降落地面源码下载
- 求职与求生
- 变化求生存
- 夹缝求生存,勤者存。
- 项目的求生测验
- debian 修改apache的默认配置路径
- Express 4.x中间件methodOverride的详细解析
- Pyinstaller Python ImportError: No module named publisher
- Unique Paths II
- vuejs之路之--v-model表单绑定
- [bzoj4977]跳伞求生
- HDU 4738 Caocao's Bridges(重边无向图求桥)
- 数组做形参的本质剖析
- 无法删除空文件解决办法
- Glide加载圆角、圆形图片
- 8月24日训练笔记
- 钻石问题 diamond problem 多继承问题
- 如何在spring普通的bean中获取session对象
- Pat(A) 1072. Gas Station (30)