bzoj2792
首先想到二分答案是吧,设为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的更多相关文章
- 【BZOJ2792】[Poi2012]Well 二分+双指针法
[BZOJ2792][Poi2012]Well Description 给出n个正整数X1,X2,...Xn,可以进行不超过m次操作,每次操作选择一个非零的Xi,并将它减一. 最终要求存在某个k满足X ...
- [BZOJ2792][Poi2012]Well
2792: [Poi2012]Well Time Limit: 40 Sec Memory Limit: 64 MBSubmit: 137 Solved: 61[Submit][Status][D ...
- POI2012题解
POI2012题解 这次的完整的\(17\)道题哟. [BZOJ2788][Poi2012]Festival 很显然可以差分约束建图.这里问的是变量最多有多少种不同的取值. 我们知道,在同一个强连通分 ...
随机推荐
- adb shell 出现 error :
首先,确保 adb 服务有起来 adb kill-server adb start-server其次,确保 adb devices 可以找到设备
- 修改tomcat 启动45秒
当我们需要增加Tomcat的启动时间,修改方法如下:
- AngularJS 基础
1. AngularJs 是一个JS 框架,是一种基于MVC的设计模式 2. script 需引用 <script src="angular.min.js">,安装包 ...
- Codeforces Round #363 (Div. 2)->C. Vacations
C. Vacations time limit per test 1 second memory limit per test 256 megabytes input standard input o ...
- Filter及FilterChain的使用详解(转)
一.Filter的介绍及使用 什么是过滤器? 与Servlet相似,过滤器是一些web应用程序组件,可以绑定到一个web应用程序中.但是与其他web应用程序组件不同的是,过滤器是"链&quo ...
- 同一机器 部署 两个 jboss
当jboss和oracle在同一机器上时,通常oracle占用8080端口,这时只需要去修改\deploy\jbossweb-tomcat50.sar\server.xml中.当在同一台机器上运行两个 ...
- Unity3d - 初学篇 Event Functions 的 继承 机制
我们知道Start() Update() 等之类的 事件函数 在Unity 主线程中是依次调用的.至于调用的顺序可以查手册. 由此继承机制也会发生一些改变. 测试一: public class MyT ...
- [shell编程]一个简单的脚本
首先,为什么要学习shell呢?哈哈,当然不是shell能够怎样怎样然后100字. 最近看到一篇博文<开阔自己的视野,勇敢的接触新知识>,读完反思良久.常常感慨自己所会不多,对新知识又有畏 ...
- JsRender系列demo-对null 和boolen类型数据的探讨
废话不说了,直接上代码 <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <he ...
- eclipse 或MyEclipse将工程进行移动的时候会对@Override报错的处理方法
有时候导入javaSE,javaEE,android 工程的时候,明明是刚刚用过的没有问题的工程,但重新导入的时候就报错. 提示The method ... must override a sperc ...