首先想到二分答案是吧,设为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. Struts2结合sitemesh3制作网站母版页面

    上一篇文章介绍了sitemesh3的使用,这篇文章来介绍如何结合struts2来配置和使用sitemesh,具体的如何使用sitemesh3我就不讲解了,这个你们可以看看我的上一篇博客. 首先你要添加 ...

  2. html5游戏引擎-Pharse.js学习笔记(一)

    1.前言 前几天随着flappy bird这样的小游戏的火爆,使我这种也曾了解过html5技术的js业余爱好者也开始关注游戏开发.研究过两个个比较成熟的html5游戏引擎,感觉用引擎还是要方便一些.所 ...

  3. C#在Winform中改变Textbox高度三种方法

    最近在做C# Winform项目,需要有一个能动态调整大小的Textbox,并且要是单行的.试了几次,单行模式的Textbox不能直接改高度.于是搜索了一下,整理出几个改变高度的方法. 1.将Text ...

  4. BZOJ 2763: [JLOI2011]飞行路线 spfa dp

    题目链接: http://www.lydsy.com/JudgeOnline/problem.php?id=2763 题解: d[x][kk]表示从s到x用了kk次免费机会的最少花费. 代码: #in ...

  5. JS利用正则配合replace替换指定字符

    替换指定字符的方法有很多,在本文为大家详细介绍下,JS利用正则配合replace是如何做到的,喜欢的朋友可以参考下 定义和用法 replace() 方法用于在字符串中用一些字符替换另一些字符,或替换一 ...

  6. 【BZOJ】【1834】【ZJOI2010】Network 网络扩容

    网络流/费用流 这题……我一开始sb了. 第一问简单的最大流…… 第二问是要建费用流的图的……但是是在第一问的最大流跑完以后的残量网络上建,而不是重建…… 我们令残量网络上原有的弧的费用全部为0(因为 ...

  7. nenu contest2

    http://vjudge.net/vjudge/contest/view.action?cid=54562#overview H  B. Polygons http://codeforces.com ...

  8. sampler state

    昨天遇到一个非常诡异的错误 samplerstate 无法加大括弧定义 编译器非要一个: 而不要{ 去掉吧'''之后的编译似乎又会报某些ss没method 现在想想 也许是 samplerstate要 ...

  9. 如何在winform DataGridView控件的DataGridViewButtonColumn按钮列中禁用按钮

    原文:http://msdn.microsoft.com/en-us/library/ms171619(v=vs.85).ASPX public class DataGridViewDisableBu ...

  10. linux源码阅读笔记 数组定义

    在阅读linux源码的过程中遇到了下面的略显奇怪的结构体数组定义. static struct hd_struct{ long start_sect; long nr_sects; }hd[10]={ ...