cf

luogu

要使得最高的柱子高度最小,考虑二分这个高度,那么剩下的就是要指定一个操作方案,使得最终每个柱子高度\(\le mid\)

因为有个柱子高度不会\(<0\)的限制,所以正着模拟不太方便维护.考虑倒着模拟,那么问题可以转化成一开始有\(n\)个高度为\(mid\)的柱子,有\(m\)天,每天每个柱子先会减少\(a_i\)高度(还要保证柱子高度每个时刻\(\ge 0\)),然后每个可以操作\(k\)次,每次选一个柱子使得其高度增加\(p\),要使得最终每个柱子高度\(\ge h_i\)

现在要知道每次操作应该选哪个柱子操作.因为要保证柱子高度每个时刻\(\ge 0\),所以应该优先选择高度最快会\(<0\)的柱子操作,形式化的讲就是如果\(t\)时刻有柱子高度为\(he\),如果中途不操作,那么这个柱子在\(t+\lfloor\frac{he}{a_i}\rfloor+1\)时刻会\(<0\),所以要在这个时刻前增加他的高度.然后显然是选择高度马上就要\(<0\)的操作最优.注意过程中已经有高度\(<0\)就不合法,如果有往后一直不操作,最终高度可以\(\ge h_i\)的柱子就不用管了.这个可以用堆维护,最后看堆是否为空即可

#include<bits/stdc++.h>
#define LL long long
#define uLL unsigned long long
#define db double using namespace std;
const int N=1e5+10,M=5000+10;
LL rd()
{
LL x=0,w=1;char ch=0;
while(ch<'0'||ch>'9'){if(ch=='-') w=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=(x<<3)+(x<<1)+(ch^48);ch=getchar();}
return x*w;
}
int n,m,kk;
LL h[N],a[N],cv3;
struct node
{
int x,t;
LL h,d;
bool operator < (const node &bb) const {return d>bb.d;}
};
priority_queue<node> hp; int main()
{
///cfzmhs
n=rd(),m=rd(),kk=rd(),cv3=rd();
LL l=0,r=(LL)1e9*(m+1);
for(int i=1;i<=n;++i)
{
h[i]=rd(),a[i]=rd();
l=max(l,a[i]);
}
while(l<=r)
{
LL mid=(l+r)>>1;
while(!hp.empty()) hp.pop();
for(int i=1;i<=n;++i)
if(mid-a[i]*m<h[i])
hp.push((node){i,1,mid-a[i],mid/a[i]});
bool ok=1;
for(int i=1;ok&&i<=m;++i)
{
int rs=kk;
while(!hp.empty()&&rs)
{
node nw=hp.top();
hp.pop();
int x=nw.x;
if(nw.h-a[x]*(m-nw.t)>=h[x]) continue;
--rs;
nw.h-=a[x]*(i-nw.t);
if(nw.h<0) {ok=0;break;}
nw.h+=cv3;
hp.push((node){x,i,nw.h,i+nw.h/a[x]});
}
if(hp.empty()) break;
}
while(!hp.empty()&&hp.top().h-a[hp.top().x]*(m-hp.top().t)>=h[hp.top().x]) hp.pop();
ok&=hp.empty();
if(ok) r=mid-1;
else l=mid+1;
}
printf("%lld\n",r+1);
return 0;
}

CF505E Mr. Kitayuta vs. Bamboos的更多相关文章

  1. 「CF505E」 Mr. Kitayuta vs. Bamboos

    「CF505E」 Mr. Kitayuta vs. Bamboos 传送门 如果没有每轮只能进行 \(k\) 次修改的限制或者没有竹子长度必须大于 \(0\) 的限制那么直接贪心就完事了. 但是很遗憾 ...

  2. Mr. Kitayuta vs. Bamboos

    Mr. Kitayuta vs. Bamboos 题目链接:http://codeforces.com/problemset/problem/505/E 参考:http://blog.csdn.net ...

  3. Mr. Kitayuta vs. Bamboos CodeForces - 505E (堆,二分答案)

    大意: 给定$n$棵竹子, 每棵竹子初始$h_i$, 每天结束时长$a_i$, 共$m$天, 每天可以任选$k$棵竹子砍掉$p$, 若不足$p$则变为0, 求$m$天中竹子最大值的最小值 先二分答案转 ...

  4. 506C Mr. Kitayuta vs. Bamboos

    分析 代码 #include<bits/stdc++.h> using namespace std; #define int long long ],h[],now[],cnt[]; in ...

  5. @codeforces - 506C@ Mr. Kitayuta vs. Bamboos

    目录 @description@ @solution@ @accepted code@ @details@ @description@ n 个竹子,第 i 个竹子初始高度 hi,在每天结束时将长高 a ...

  6. Codeforces 505E - Mr. Kitayuta vs. Bamboos(二分+堆)

    题面传送门 首先很显然的一点是,看到类似于"最大值最小"的字眼就考虑二分答案 \(x\)(这点我倒是想到了) 然鹅之后就不会做了/wq/wq/wq 注意到此题正着处理不太方便,故考 ...

  7. ACM: Mr. Kitayuta's Colorful Graph-并查集-解题报

    Mr. Kitayuta's Colorful GraphTime Limit:1000MS Memory Limit:262144KB 64bit IO Format:%I64d & %I6 ...

  8. CodeForces 505B Mr. Kitayuta's Colorful Graph

    Mr. Kitayuta's Colorful Graph Time Limit:1000MS     Memory Limit:262144KB     64bit IO Format:%I64d ...

  9. Codeforces Round #286 (Div. 2) B. Mr. Kitayuta's Colorful Graph dfs

    B. Mr. Kitayuta's Colorful Graph time limit per test 1 second memory limit per test 256 megabytes in ...

随机推荐

  1. spark-submit 提交任务及参数说明

    spark-submit 可以提交任务到 spark 集群执行,也可以提交到 hadoop 的 yarn 集群执行. 1. 例子 一个最简单的例子,部署 spark standalone 模式后,提交 ...

  2. 性能测试 | 服务器CPU使用率高分析实例

    前面我们讨论系统调用的时候结论是耗时200ns-15us不等.不过我今天说的我的这个遭遇可能会让你进一步认识系统调用的真正开销.在本节里你会看到一个耗时2.5ms的connect系统调用,注意是毫秒, ...

  3. R-CNN论文阅读摘要

    论文链接: https://arxiv.org/pdf/1311.2524.pdf Abstract Our approach combines two key insights: (1) one c ...

  4. CefGlue获取网页源代码

    1.编写一个CefStringVisitor类: public class MyStringVisitor : CefStringVisitor { private readonly TaskComp ...

  5. Docker镜像搭建ubuntu下samba目录共享

    第一种方法:(未使用) yum install docker // 下载镜像 docker pull dperson/samba // 启动镜像,具体看文档,但重要的配置是以下的注释 docker r ...

  6. jeecg随笔

    1.根据数据字典code查找该字典下的元素: SELECT typecode,typename from t_s_type where typegroupid=(select id from t_s_ ...

  7. Python数据分析中 DataFrame axis=0与axis=1的理解

    python中的axis究竟是如何定义的呢?他们究竟代表是DataFrame的行还是列? 直接上代码people=DataFrame(np.random.randn(5,5), columns=['a ...

  8. 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_6-3.微信网站扫码支付介绍

    笔记 3.微信网站扫码支付介绍     简介:讲解微信网页扫码支付         1.扫码支付文档:https://pay.weixin.qq.com/wiki/doc/api/native.php ...

  9. ElasticSearch——自定义模板

    output中配置 elasticsearch{ action => "index" hosts => ["xxx"] index => &q ...

  10. DES算法概述

    DES全称为Data Encryption Standard,即数据加密标准.1997年数据加密标准DES正式公布,其分组长度为64比特,密钥长度为64比特,其中8比特为奇偶校验位,所以实际长度为56 ...