首先想到二分答案是吧,设为lim

这道题难在判定,我们先不管将一个数变为0的条件

先使序列满足相邻差<=lim,这个正着扫一遍反着扫一遍即可

然后我们就要处理将一个数变为0的修改代价

当i变为0后,我们分别考虑左右两边的代价,对于左边

如果a[j]>(i-j)*lim的话,aj要变成a[i]+(i-j)*lim,否则的话,对于k<=j都不用变化,右边类似的道理

观察式子,a[j]>(i-j)*lim即a[j]+j*lim>i*lim,怎么做很明显了吧……

 var a,b,d:array[..] of longint;
c,v:array[..] of int64;
l,r,mx,mid,ans,i,n:longint;
m,s:int64; function min(a,b:longint):longint;
begin
if a>b then exit(b) else exit(a);
end; function max(a,b:longint):longint;
begin
if a>b then exit(a) else exit(b);
end; function check(lim:longint):longint;
var y,i:longint;
s,w,t:int64;
begin
for i:= to n do
b[i]:=a[i];
t:=;
for i:= to n- do
if b[i+]>b[i]+lim then
begin
t:=t+b[i+]-(b[i]+lim);
b[i+]:=b[i]+lim;
end;
for i:=n downto do
if b[i-]>b[i]+lim then
begin
t:=t+b[i-]-(b[i]+lim);
b[i-]:=b[i]+lim;
end;
if t>m then exit();
fillchar(c,sizeof(c),);
fillchar(d,sizeof(d),);
for i:= to n do
begin
y:=min(i+b[i] div lim,n);
c[y]:=c[y]+b[i]-int64(y-i)*int64(lim);
inc(d[y]);
if i<> then c[i-]:=c[i-]-b[i];
dec(d[i]);
end;
s:=;
w:=;
for i:=n downto do
begin
s:=s+c[i]+w*int64(lim);
v[i]:=s;
w:=w+d[i];
end;
fillchar(c,sizeof(c),);
fillchar(d,sizeof(d),);
for i:=n downto do
begin
y:=max(i-b[i] div lim,);
c[y]:=c[y]+b[i]-int64(i-y)*int64(lim);
inc(d[y]);
c[i]:=c[i]-b[i];
if i<> then dec(d[i-]);
end;
s:=;
w:=;
for i:= to n do
begin
s:=s+c[i]+w*int64(lim);
v[i]:=v[i]+s;
w:=w+d[i];
end;
for i:= to n do
if t+v[i]<=m then exit(i); exit();
end; begin
readln(n,m);
for i:= to n do
begin
read(a[i]);
s:=s+a[i];
if a[i]>mx then mx:=a[i];
end;
if s<=m then
begin
writeln('1 0');
halt;
end;
l:=;
r:=mx;
while l<=r do
begin
mid:=(l+r) shr ;
if check(mid)> then
begin
ans:=mid;
r:=mid-;
end
else l:=mid+;
end;
writeln(check(ans),' ',ans);
end.

bzoj2792的更多相关文章

  1. 【BZOJ2792】[Poi2012]Well 二分+双指针法

    [BZOJ2792][Poi2012]Well Description 给出n个正整数X1,X2,...Xn,可以进行不超过m次操作,每次操作选择一个非零的Xi,并将它减一. 最终要求存在某个k满足X ...

  2. [BZOJ2792][Poi2012]Well

    2792: [Poi2012]Well Time Limit: 40 Sec  Memory Limit: 64 MBSubmit: 137  Solved: 61[Submit][Status][D ...

  3. POI2012题解

    POI2012题解 这次的完整的\(17\)道题哟. [BZOJ2788][Poi2012]Festival 很显然可以差分约束建图.这里问的是变量最多有多少种不同的取值. 我们知道,在同一个强连通分 ...

随机推荐

  1. 【转】并查集&MST题集

    转自:http://blog.csdn.net/shahdza/article/details/7779230 [HDU]1213 How Many Tables 基础并查集★1272 小希的迷宫 基 ...

  2. 【CodeForces】【#286】Div.2

    T_T越来越水了,这次只做出A+B. A题为了代码简单直接枚举(插入位置和插入字符) //CF #286 Div.2 A #include<vector> #include<stri ...

  3. [转载]如何申请淘宝app_key、app_secret、SessionKey?

    不知道如何申请淘宝开发平台的App Key?其实申请App key很简单,主要了解申请步骤以及各个App key的数据阶段状态就可以了!下面由淘客帝国为您做详细图文讲解!申请比较简单,不过为了新手能够 ...

  4. sql2008安装时提示重启计算机失败解决方法

    安装sql 2008的时候,在检测安装环境中有一项是”重新启动计算机”显示的结果是“失败”.上网看了半天,找到了解决方案,虽然我没弄明白具体原因,但问题是解决了,解决方案如下: 一.Windows+R ...

  5. Unity3D研究院之脚本批量打包渠道包研究

    原地址:http://www.xuanyusong.com/archives/2418#comments 最近在研究Unity3D脚本批量打包,比如在Android平台下各种不同分辨率和不同内存大小的 ...

  6. 玩转图片Base64编码

    什么是 base64 编码? 图片的 base64 编码就是可以将一副图片数据编码成一串字符串,使用该字符串代替图像地址. 这样做有什么意义呢?我们知道,我们所看到的网页上的每一个图片,都是需要消耗一 ...

  7. POJ2485Highways

    http://poj.org/problem?id=2485 题意 : 这道题和1258很像,但是这道题求的是最小生成树中最大的那条边,所以在函数里处理一下就行了. 思路 : 赤裸裸的最小生成树啊,但 ...

  8. hdu1017

    http://acm.hdu.edu.cn/showproblem.php?pid=1017 #include<iostream> #include<stdio.h> #inc ...

  9. Linux 学习guideline

    记得在中国人气和高手最多的linuxform上看到的一句话. 现在自己的书架上以后lkd2+ldd3+情景分析,再加上它ulk3,书架的linux kernel的四库全书已经凑齐,很充实. lkd2: ...

  10. JavaWeb项目开发案例精粹-第2章投票系统-006view层

    1.index.jsp <%@ page language="java" import="java.util.*" pageEncoding=" ...