你需要最大化被数量最少的弓箭手保护的墙被弓箭手保护的数量。想到什么,对了,二分答案。

对 $check$ 函数进行思考。

令答案为 $m$。

如果一个点的值小于 $m$,则考虑将其变成 $m$,那么将这一段加在哪里呢?

设位置为:$x$,要加的值为 $y$。贪心一下很显然要将以 $x$ 为起点向右的一段长度为 $2r$ 的区间都加上 $y$。

那么如何维护当前的值呢?看到单点查询,和区间加,相信很多人会想到线段树,但其实不用,差分数组即可维护。

代码:

#include <bits/stdc++.h>
using namespace std;
#define int long long
int n,r,k;
const int N=(5e5+7)*2;
int a[N],b[N],c[N];
int max(int a,int b){
return (a>b?a:b);
}
bool check(int k2){
int sum=0;
for(int i=1;i<=n;i++) c[i]=b[i];
for(int i=1;i<=n;i++){
c[i]+=c[i-1];
if(c[i]<k2){
//将以x为起点向右的一段长度为2r的区间都加上y.代码中i是x,x是y。
int x=k2-c[i];
sum+=x;
c[i]+=x;
c[i+2*r+1]-=x;
if(sum>k) return 0;
}
}
return 1;
}
signed main() {
ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
int l=0,r2=0,mid,ans;
cin>>n>>r>>k;
for(int i=1;i<=n;i++){
cin>>a[i];
b[i+r+1]-=a[i];
b[max(1,i-r)]+=a[i];
r2+=a[i]+k;
}
while(l<=r2){
mid=(l+r2)>>1;
if(check(mid)) l=mid+1,ans=mid;
else r2=mid-1;
}
cout<<ans;
return 0;
}

Castle Defense的更多相关文章

  1. Educational Codeforces Round 40 G. Castle Defense (二分+滑动数组+greedy)

    G. Castle Defense time limit per test 1.5 seconds memory limit per test 256 megabytes input standard ...

  2. Codeforces 954 G. Castle Defense

    http://codeforces.com/problemset/problem/954/G 二分答案 检验的时候,从前往后枚举,如果发现某个位置的防御力<二分的值,那么新加的位置肯定是越靠后越 ...

  3. [CodeForces954G]Castle Defense(二分答案+差分)

    Description 题目链接 Solution 二分答案,套一个差分标记即可 每次放弓箭手显然越右边越优 Code #include <cstdio> #include <alg ...

  4. [CF954G]Castle Defense

    题目大意:有$n$个点,每个点最开始有$a_i$个弓箭手,在第$i$个位置的弓箭手可以给$[i-r,i+r]$区间加上$1$的防御,你还有$k$个弓箭手,要求你最大化最小防御值 题解:二分答案,从右向 ...

  5. Educational Codeforces Round 40 (Rated for Div. 2) 954G G. Castle Defense

    题 OvO http://codeforces.com/contest/954/problem/G 解 二分答案, 对于每个二分的答案值 ANS,判断这个答案是否可行. 记 s 数组为题目中描述的 a ...

  6. Educational Codeforces Round 40 (Rated for Div. 2) Solution

    从这里开始 小结 题目列表 Problem A Diagonal Walking Problem B String Typing Problem C Matrix Walk Problem D Fig ...

  7. Educational Codeforces Round 40 A B C D E G

    A. Diagonal Walking 题意 将一个序列中所有的\('RU'\)或者\('UR'\)替换成\('D'\),问最终得到的序列最短长度为多少. 思路 贪心 Code #include &l ...

  8. Castle Core 4.0.0 alpha001发布

    时隔一年多以后Castle 项目又开始活跃,最近刚发布了Castle Core 4.0.0 的alpha版本, https://github.com/castleproject/Core/releas ...

  9. 对Castle Windsor的Resolve方法的解析时new对象的探讨

    依赖注入框架Castle Windsor从容器里解析一个实例时(也就是调用Resolve方法),是通过调用待解析对象的构造函数new一个对象并返回,那么问题是:它是调用哪个构造函数呢? 无参的构造函数 ...

  10. AOP之Castle DynamicProxy 动态代理

    这里主要介绍使用castle这个动态代理,在.net一些开源的框架里可以找到它的影子,就连微软的rchard也是使用这个进行方法拦截等可以基于这个进行方法拦截,在这个方面PostSharp算是比较好用 ...

随机推荐

  1. PIL或Pillow学习1

    PIL( Python Imaging Library)是 Python 的第三方图像处理库,由于其功能丰富,API 简洁易用,因此深受好评. 自 2011 年以来,由于 PIL 库更新缓慢,目前仅支 ...

  2. 项目管理协作工具对比:PingCode vs Leangoo

    多语言适配能力 在全球化协作场景下,多语言支持成为跨国团队的硬性指标.PingCode目前仅支持中文界面,对于涉及多国语言协作的团队存在使用局限.对比Leangoo提供中英文双语界面切换功能,可满足基 ...

  3. 运维 —— IMP-00030: failed to create file import_sys for write

    IMP-00030: failed to create file import_sys for writeIMP-00000: Import terminated unsuccessfully原因:操 ...

  4. 【软件】Rhythmbox播放器调节音量

    Rhythmbox播放器调节音量 零.起因 最近换了Ubuntu系统,在写代码时想听歌,故使用Rhythmbox播放器播放一些mp3文件,但同时又要看教程,希望音乐声音小一点,但是找来找去都没有发现R ...

  5. Linux | 如何创建一个 home 目录在 /data 磁盘的 sudo 用户

    需求: 拿到了 boss 的服务器账号 ssh boss@172.16.1.100,需要登录 boss 的账号,然后为自己创建一个账号,实现 ssh <user_name>@172.16. ...

  6. 3. RabbitMQ 的(Hello World) 和 RabbitMQ 的(Work Queues)工作队列

    3. RabbitMQ 的(Hello World) 和 RabbitMQ 的(Work Queues)工作队列 @ 目录 3. RabbitMQ 的(Hello World) 和 RabbitMQ ...

  7. 【FAQ】HarmonyOS SDK 闭源开放能力 — IAP Kit(6)

    1.问题描述: 支付场景,表现是在沙盒情况下所有商品都可以正常跑通,但是在非沙盒情况下,线上购买年包1800大额支付华为的 iap.createPurchas 在输完密码就会报 1001860001 ...

  8. MySQL安装入门第一篇

    [1]MySQL的版本:近期主要历史版本有5.0/5.1/5.5/5.6/5.7,目前最新版本是MySQL8.6.0曾经是个内部试验版本,已取消了. MySQL8.0的版本历史 1) 2016-09- ...

  9. ESP32教程:通过WIFI控制LED灯的开关

    LED闪烁 在通过WIFI控制LED灯的开关之前,我们先实现一下LED闪烁. 接线图: 来源:https://esp32io.com/tutorials/esp32-led-blink 我的接线图: ...

  10. 小程序自定义组件 - 插槽slot

    和 vue 的 slot 几乎是一模一样的. 这个学小程序就相当于复习了一把 vue, 还是很值的. 我们之前说组件是页面的一部分, 目的是为了代码复用, 作为组件封装者, 有时候需要设计一些让用户能 ...