【CodeForces954G】Castle Defense(二分答案+差分)

Description

题目链接

Solution

二分答案,套一个差分标记即可

每次放弓箭手显然越右边越优

Code

#include <cstdio>
#include <algorithm>
#include <cstring>
#define N 2000010
#define ll long long
using namespace std;

int n,R;
ll A[N],k,Ans,l=1e18,r=1e20,cf[N],sum[N];

inline ll read(){
    ll x=0,f=1;char ch=getchar();
    while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
    while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
    return x*f;
}

bool check(ll m){
    ll tmp=k,x=0;
    memset(cf,0,sizeof(cf));
    for(int i=1;i<=n;++i){
        x+=cf[i];
        if(sum[min(i+R,n)]-sum[max(i-R-1,0)]+x<m){
            ll d=m-(sum[min(i+R,n)]-sum[max(i-R-1,0)]+x);
            if(d>tmp) return 0;
            tmp-=d;
            x+=d;
            cf[i+2*R+1]-=d;
        }
    }
    return 1;
}

int main(){
    scanf("%d%d%I64d\n",&n,&R,&k);
    for(int i=1;i<=n;++i){sum[i]=sum[i-1]+(A[i]=read());l=min(l,A[i]);}
    while(l<r){
        ll m=(l+r)>>1ll;
        if(check(m)) Ans=m,l=m+1;
        else r=m;
    }
    printf("%I64d\n",Ans);
    return 0;
}

原文地址:https://www.cnblogs.com/void-f/p/8630129.html

时间: 2024-10-12 06:42:02

【CodeForces954G】Castle Defense(二分答案+差分)的相关文章

[NOIP2015]运输计划 D2 T3 LCA+二分答案+差分数组

[NOIP2015]运输计划 D2 T3 Description 公元2044年,人类进入了宇宙纪元. L国有n个星球,还有n-1条双向航道,每条航道建立在两个星球之间,这n-1条航道连通了L国的所有星球. 小P掌管一家物流公司,该公司有很多个运输计划,每个运输计划形如:有一艘物流飞船需要从ui号星球沿最快的宇航路径飞行到vi号星球去.显然,飞船驶过一条航道是需要时间的,对于航道j,任意飞船驶过它所花费的时间为tj,并且任意两艘飞船之间不会产生任何干扰. 为了鼓励科技创新,L国国王同意小P的物流

Luogu P1083 借教室【二分答案/差分】By cellur925

题目描述 Description 在大学期间,经常需要租借教室.大到院系举办活动,小到学习小组自习讨论,都需要 向学校申请借教室.教室的大小功能不同,借教室人的身份不同,借教室的手续也不一样. 面对海量租借教室的信息,我们自然希望编程解决这个问题. 我们需要处理接下来n天的借教室信息,其中第i天学校有ri个教室可供租借.共有m份 订单,每份订单用三个正整数描述,分别为dj, sj, tj,表示某租借者需要从第sj天到第tj天租 借教室(包括第sj天和第tj天),每天需要租借dj个教室. 我们假定

10.05T2 二项式展开+二分答案+差分数组

Description 御坂美琴正在进行能力测试御坂美琴正在进行能力测试,她手上有 k 枚硬币,她面前 50 米有 n 个相邻放置的自动售货机,编号为 1 到 n,且每个售货机都有一个耐久度 vi ,为了使测试更有难度,考官钦定了一个值 m .御坂美琴可以精准击中任意一个售货机,且排在被命中的售货机前的售货机也会受到溅射伤害.具体来说,若御坂美琴使用 p 的攻击力取投掷硬币,被击中的售货机 i 会受到 p 的伤害,且排在此售货机前的第 j 个售货机会受到max(0,p−(i−j)m), 的伤害.

NOIp2015 运输计划 [LCA] [树上差分] [二分答案]

我太懒了 吃掉了题面 题解 & 吐槽 一道很好的树上差分练习题. 不加fread勉强a过bzoj和luogu的数据,加了fread才能在uoj里卡过去. 可以发现,答案则是运输计划里花费的最大值,最大值最小,便是二分答案的标志. 那么该怎么check呢... 我们得找出所有超过限制的计划,这个过程可以在LCA倍增的过程中预处理出来. 然后再找出一些被这些计划都覆盖的边,找到最大的那条边,如果最大的计划花费减去最大的那条边小于x,那么x就是可行的. 但是该怎么找到那些被计划都覆盖的边呢... 我们

codevs 1183 泥泞的道路 (二分+SPFA+差分约束)

/* 二分答案(注意精度) 对于每一个答案 有(s1+s2+s3...)/(t1+t2+t3...)>=ans 时符合条件 这时ans有变大的空间 对于上述不等式如果枚举每一条路显得太暴力 化简一下变成 :s1-t1*ans+s2-t2*ans+s3-t3*ans...>=0 差分约束跑最长路 如果dis[n]>0 或者有正环 (开始这个忘掉了)ans就合法 */ #include<iostream> #include<cstdio> #include<cs

二分答案入门乱讲

1.关于二分答案 如果reader没有学过二分,那么我建议您把这个网站关掉.不是我有偏见或者什么,看这篇文章对不了解二分的人来说没有好处. 对 于一些问题,它的解满足单调性,即如果x满足条件,则对于任意的 i ( 1<=i<=x) 或 (x <=i <=n) (假设1和n是答案的上下界)都会满足条件.一般遇上这种问题,我们就可以用二分答案来加快解决.这种问题常常有关键语句:使最大......最小. 对于上面的问题,在没学二分答案的时候,我们是这么写的:(假设答案是上界) for(i

【笔记】二分答案

二分答案 O(nlogm) 对一段有序的序列 每次二分,从而快速的查找.解决的问题常是"使最大值最小"或"使最小值最大". 注意:①注意二分的序列是有序的,对于无序的序列进行二分需要先排序. ②二分的区间尽可能大(给定区间左右端点+-1) ③根据题目要求,设定好check函数. ④防止死循环.↓ 模板: 1 //第一种 2 while(r-1>l) 3 { 4 int mid=(l+r)>>1; 5 if(check(mid)) l=mid; 6

Codeforces 772A Voltage Keepsake - 二分答案

You have n devices that you want to use simultaneously. The i-th device uses ai units of power per second. This usage is continuous. That is, in λ seconds, the device will use λ·ai units of power. The i-th device currently has bi units of power store

HDU3081Marriage Match II(二分答案+并查集+最大流SAP)经典

Marriage Match II Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 2507    Accepted Submission(s): 856 Problem Description Presumably, you all have known the question of stable marriage match. A