1 条题解
-
0
自动搬运
来自洛谷,原作者为

kikuss
**搬运于
2025-08-24 21:33:41,当前版本为作者最后更新于2018-09-05 21:01:24,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
Solution
set极简AC,看题解那么多自己打的平衡树,其实STL挺好用的
现在碰到平衡树的题目一般都是vector或者是set水过去,
比如这道题....
题目要求不能重复,set啊,什么都不用判断,直接插入,方便
只是要注意的set的end函数和vector一样是开区间,而set的迭代器又只支持 和操作,所以在删除最大值的时候记得将迭代器
Code
#include<bits/stdc++.h> #define lol long long #define il inline #define rg register #define Min(a,b) (a)<(b)?(a):(b) #define Max(a,b) (a)>(b)?(a):(b) using namespace std; const int N=1e5+10; void in(lol &ans) { ans=0; lol f=1; char i=getchar(); while(i<'0' || i>'9') {if(i=='-') f=-1; i=getchar();} while(i>='0' && i<='9') ans=(ans<<1)+(ans<<3)+i-'0', i=getchar(); ans*=f; } struct node { lol x,v; bool operator < (const node & a) const {return v<a.v;} }; set<node>v; int main() { lol op,x,y; node tmp; while(1) { in(op); if(op==1) { in(x),in(y); tmp = (node) {x,y}; v.insert(tmp); } else if(op==2) {if(v.size()) v.erase(--v.end());} else if(op==3) {if(v.size()) v.erase(v.begin());} else { lol ans1=0,ans2=0; for(set<node>::iterator it=v.begin();it!=v.end();it++) ans1+=(*it).x,ans2+=(*it).v; printf("%lld %lld\n",ans1,ans2); return 0; } } return 0; }
- 1
信息
- ID
- 1038
- 时间
- 1000ms
- 内存
- 125MiB
- 难度
- 3
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者