写在前面

  • 由于菜,写树状数组写挂了。
  • 于是想出了一种不像线段树或树状数组+二分答案那样显然,但是依旧不难想,复杂度比较优秀,代码难度低的做法。

算法思路

外部二分答案,不多解释,稍证明一下单调性:

若把每一次浇水都浇到当前最低的花上,浇水次数越多,花的高度最小值不会变小,满足单调性。

考虑到在某个点被浇的次数只与上一盆水是否为之前某次浇水的终点和这点是否需要继续浇水,以及需要继续浇多少次有关。

那么存一个变量统计当前这个点目前已经被浇了多少次水,设这个变量为 \(x\)。

每当需要浇一次水的时候,假设此时位置是 \(i\),就在 \(i + w\) 的位置打一个数值上等于此次浇水次数相反数的标记。

这样,每当遍历到某个点的时候,先继承上个位置的 \(x\) 并将 \(x\) 加上该点的标记。

再判断 \(a_i + x\) 是否小于二分值 \(lim\),若小于,就浇到这个值,统计次数,打标记。

Tips

  • 有的测试点答案很大,二分最大边界开成 \(2\times 10^9\) 足够。
  • 如果不特判,标记数组大小要开两倍,不然 \(i + w\) 有会越界。
  • 不开 long long 见祖宗。

Code

#include<bits/stdc++.h>
#define LL long long const int Maxn = 1e5 + 5;
const int Maxm = 1e5;
const LL Maxw = 2e9; using namespace std; LL a[Maxn];
LL b[Maxn << 1];
int n, m, w; bool check(LL lim) {
LL total = 0, nowt = 0;
memset(b, 0, sizeof(b));
for(register int i = 1; i <= n; ++i) {
nowt += b[i];
if(a[i] + nowt < lim) {
LL t = lim - (a[i] + nowt);
total += t;
b[i + w] = -t;
nowt = lim - a[i];
}
}
return total <= m;
} signed main() {
scanf("%d%d%d", &n, &m, &w);
for(register int i = 1; i <= n; ++i) scanf("%lld", &a[i]);
LL l = 0, r = Maxw, mid, ans = -1;
while(l <= r) {
mid = (l + r) >> 1;
if(check(mid)) {
l = mid + 1;
ans = mid;
}
else {
r = mid - 1;
}
}
printf("%lld", ans);
return 0;
}

CF460C Present的更多相关文章

  1. CF460C Present (二分 + 差分数列)

    Codeforces Round #262 (Div. 2) C C - Present C. Present time limit per test 2 seconds memory limit p ...

  2. 我的刷题单(8/37)(dalao珂来享受切题的快感

    P2324 [SCOI2005]骑士精神 CF724B Batch Sort CF460C Present CF482A Diverse Permutation CF425A Sereja and S ...

  3. 跳转时候提示Attempt to present on while a presentation is in progress

    出现这种情况,例如:我在获取相册图片后,直接present到另一个页面,但是上一个页面可能还未dismiss,所以,要在获取相册图片的dismiss方法的complete的block里面写获取图片及跳 ...

  4. find your present (感叹一下位运算的神奇)

    find your present (2) Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Ot ...

  5. HTTP Status 400 - Required String parameter 'userName' is not present 错误

    HTTP Status 400 - Required String parameter 'userName' is not present 错误 先mark  有时间详细写 参考链接: https:/ ...

  6. Linux 克隆虚拟机引起的“Device eth0 does not seem to be present, delaying initialization”

    虚拟机Vmware上克隆了一个Red Hat Enterprise Linx启动时发现找不到网卡,如下所示,如果你在命令窗口启动网络服务就会遇到"Device eth0 does not s ...

  7. required string parameter XXX is not present

    @RequestParam jQuery调用方式: deleteFile: function(filePath) { return ajax({ method: 'POST', url: '/cm/s ...

  8. 启动网卡报:Device eth0 does not seem to be present”解决办法

    Device eth0 does not seem to be present”解决办法 : 用ifconfig查看发现缺少eth0,只有lo:用ifconfig -a查看发现多出了eth1的信息. ...

  9. jQuery 跨域访问的三种方式 No 'Access-Control-Allow-Origin' header is present on the reque

    问题: XMLHttpRequest cannot load http://v.xxx.com. No 'Access-Control-Allow-Origin' header is present ...

随机推荐

  1. java中如何实现同一账号不能同时登录

    经过两天的研究,下面给两个方法.不个是webwork版本的,一个是修改过后的网上的意见监听器版本的 (一) 首先先上自己的研究成果 1:首先在baseAction 中或者直接在action中写一个方法 ...

  2. 将Maven镜像更换为国内阿里云仓库

    1.国内访问maven默认远程中央镜像特别慢 2.用阿里的镜像替代远程中央镜像 3.大部分jar包都可以在阿里镜像中找到,部分jar包在阿里镜像中没有,需要单独配置镜像 换为国内镜像,让你感受飞一般的 ...

  3. LOG_PATH_IS_UNDEFINED

    问题: SpringBoot + LogBack 写日志,除了正常的日志之外,程序跑起来后会在项目根目录多生成一个 LOG_PATH_IS_UNDEFINED 的文件夹,我的配置是以下: applic ...

  4. java.io.NotSerializableException: org.apache.kafka.clients.consumer.ConsumerRecord

    kafka 与spark集成 序列化问题 sparkConf.set("spark.serializer", "org.apache.spark.serializer.K ...

  5. PHP 导入Excel数据 到数据库

    /** * 导入excel * @throws \PHPExcel_Exception * @throws \PHPExcel_Reader_Exception */ public function ...

  6. FastAPI学习: 个人博客的后端API

    前言 学习FastAPI中把官方文档过了一遍,看了些大佬的文章,也借鉴(抄袭)了部分代码,写了一套个人博客的API,目前还比较简陋,统计的API基本没有,而且目前基本都停留在单表查询,所以含量不高,接 ...

  7. LeetCode703 流中第k大的元素

    前言: 我们已经介绍了二叉搜索树的相关特性,以及如何在二叉搜索树中实现一些基本操作,比如搜索.插入和删除.熟悉了这些基本概念之后,相信你已经能够成功运用它们来解决二叉搜索树问题. 二叉搜索树的有优点是 ...

  8. oracle 11g 安装与卸载

    安装 点击是,这是位数不一致,但可用. 桌面类――这种安装方式一般适用于台式机和笔记本.它包含一个最小数据库和最低的配置需求. 服务器类――这种安装方式适用于服务器,例如,它会向您提供数据中心和用于支 ...

  9. Burp suite的系列介绍 (1)

    前言 为了进行Web安全方面的学习,Burp suite是必备的工具之一,我们将会从多个模块进行逐步的学习. Burp suite的应用场景 1.HTTP服务端接口测试. 2.HTTP客户端和HTTP ...

  10. 洛谷P1198 [JSOI2008]最大数(线段树/单调栈)

    题目链接: https://www.luogu.org/problemnew/show/P1198 题目描述 现在请求你维护一个数列,要求提供以下两种操作: 1. 查询操作. 语法:Q L 功能:查询 ...