博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【set】【multiset】Codeforces Round #484 (Div. 2) D. Shark
阅读量:6447 次
发布时间:2019-06-23

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

题意:给你一个序列,让你找一个k,倘若把大于等于k的元素都标记为不可用,那么剩下的所有元素形成的段的长度相同,并且使得段的数量尽量大。如果有多解,输出k尽量小的。

把元素从大到小排序插回原位置,用一个set维护前驱后继,相当于删除一个原有的段,然后将这个段切成两半,产生两个新的段。维护这次操作后所有段的长度以及各种长度的出现次数(用multiset),一旦合法,就尝试更新答案。

#include
#include
#include
using namespace std;typedef pair
Point;set
S;multiset
S2;int n;Point a[100005];int all,ans,maxnum;int main(){ scanf("%d",&n); int x; S2.insert(n); maxnum=1; for(int i=1;i<=n;++i){ scanf("%d",&x); a[i].first=x; a[i].second=i; } sort(a+1,a+n+1); ans=a[n].first+1; S.insert(0); S.insert(n+1); for(int i=n;i>=1;--i){ S.insert(a[i].second); int y=*S.upper_bound(a[i].second); set
::iterator it=S.lower_bound(a[i].second); --it; int x=*it; S2.erase(S2.find(y-x-1)); if(y-a[i].second>1){ S2.insert(y-a[i].second-1); } if(a[i].second-x>1){ S2.insert(a[i].second-x-1); } if(!S2.empty()){ multiset
::iterator jt=S2.end(); --jt; if((*S2.begin())==(*jt)){ if(S2.size()>maxnum || (S2.size()==maxnum && a[i-1].first+1

转载于:https://www.cnblogs.com/autsky-jadek/p/9055525.html

你可能感兴趣的文章
82%的IT专业人员认为Windows 10会让他们的公司更安全
查看>>
与美女CEO罗元裳共进午餐!朋友圈被7分钟理财刷屏!
查看>>
卡巴斯基网络安全解决方案实现自动化
查看>>
皮尤:62%美国成人从社交网站获取新闻
查看>>
Windows 10 Mobile内部编译版本已移除Silverlight支持
查看>>
“对外”SaaS蓝海:移动CRM最吸金
查看>>
反倾销半年涉案85亿 光伏出口或受影响
查看>>
图尔克推行户RFID设备控制器TBEN-L-DCC,可进行数据控制
查看>>
有了大数据的介入 以后考试可能都没法作弊了
查看>>
数据中心服务器虚拟化技术介绍
查看>>
要想做好软件测试工作,就要学会思考并问为什么
查看>>
qa应掌握的技能
查看>>
三部委:鼓励光伏项目进口先进技术和产品
查看>>
新进入者布局移动互联网形成有力挑战
查看>>
AOI 2016年第三季度数据中心光模块营收同增37%
查看>>
交换机引领多媒体时代 东进颠覆传统CTI
查看>>
三选一 软件定义存储技术总有一款适合你
查看>>
支付宝不做社交用户猛涨!第一季度日活大增40%
查看>>
Oracle单行函数和多行函数实例
查看>>
汤森路透拟35.5亿美元出售知识产权与科技业务
查看>>