题面

比较明显地能看出二分来,但是检查函数很难写。对于二分出的一个$mid$,我们要让它满足在$m$次操作内令序列中存在一个为零的位置,同时使得任意相邻的两项之差不超过$mid$

第二项的检查比较好做,我们正反各扫一遍然后把扫到的上一个数对当前数与$mid$之差取最小值,就是满足条件的最小代价

对于第一项的检查,我们发现可以将原数列修改成一段段的等差数列,这样在存在零的情况下是最优的。我们枚举这个变成零的位置,然后找出$h_l-k-l*mid>0$和$h_r-r-k*mid>0$的$l,r$,这两个端点具有单调性,可以用双指针扫描解决

 #include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=;
long long h[N],tmp[N],fsum[N],cst[N];
long long n,m,l,r,f,b,ans1,ans2;
long long check(long long x)
{
long long tep=;
for(int i=;i<=n;i++) tmp[i]=h[i];
for(int i=;i<=n;i++)
if(tmp[i]>tmp[i-]+x)
tep+=tmp[i]-tmp[i-]-x,tmp[i]=tmp[i-]+x;
for(int i=n-;i;i--)
if(tmp[i]>tmp[i+]+x)
tep+=tmp[i]-tmp[i+]-x,tmp[i]=tmp[i+]+x;
if(m<tep) return ;
for(int i=;i<=n;i++) fsum[i]=fsum[i-]+tmp[i];
memset(cst,,sizeof cst); f=,b=n;
for(int i=;i<n;i++)
{
while(f<=i&&tmp[f]<=1ll*(i-f+)*x) f++;
cst[i+]+=fsum[i]-fsum[f-]-1ll*(i-f+)*(i-f+)*x/;
}
for(int i=n+;i>=;i--)
{
while(b>=i&&tmp[b]<=1ll*(b-i+)*x) b--;
cst[i-]+=fsum[b]-fsum[i-]-1ll*(b-i+)*(b-i+)*x/;
}
for(int i=;i<=n;i++)
if(tep+cst[i]+tmp[i]<=m) return i;
return ;
}
int main ()
{
scanf("%lld%lld",&n,&m);
for(int i=;i<=n;i++)
scanf("%lld",&h[i]),r=max(r,h[i]);
while(l<=r)
{
long long mid=(l+r)/;
if(check(mid)) r=mid-,ans2=mid; else l=mid+;
}
ans1=check(ans2);
printf("%lld %lld",ans1,ans2);
return ;
}

解题:POI 2012 Well的更多相关文章

  1. 解题:POI 2012 Cloakroom

    题面 首先,单独处理每个询问复杂度显然不可承受,还是考虑通过排序使得限制更容易达到:按照$a$将物品排序,按照$m$将询问排序,这样肯定是要不断添加物品才能达到要求,顺着做一遍就行了 然后发现$b$的 ...

  2. 【BZOJ 2803】【POI 2012】Prefixuffix

    http://www.lydsy.com/JudgeOnline/problem.php?id=2803 核心思想是利用单调性. 因为长度为L的前缀和后缀循环同构是AB和BA的形式,我们设\(f(i) ...

  3. [ POI 2012 ] Letters

    \(\\\) \(Description\) 给出两个长度为 \(N\) 的字符串\(S_1,S_2\),且保证两个字符串中每一个字符出现次数相同. 现在一次操作可以交换相邻的两个字符,问将 \(S_ ...

  4. POI题解整合

    我也不知道为啥我就想把POI的题全都放到一篇blog里写完. POI 2005 SAM-Toy Cars 贪心,每次选下次出现最晚的. POI 2006 KRA-The Disks 箱子位置单调,所以 ...

  5. 解题:POI 2016 Nim z utrudnieniem

    题面 出现了,神仙题! 了解一点博弈论的话可以很容易转化题面:问$B$有多少种取(diu)石子的方式使得取后剩余石子异或值为零且取出的石子堆数是$d$的倍数 首先有个暴力做法:$dp[i][j][k] ...

  6. 2012 East Central Regional Contest 解题报告

    昨晚各种莫名其妙卡题. 不过细看这套题还挺简单的.全是各种暴力. 除了最后一道题计算几何看起来很麻烦的样子,其他题都是很好写的吧. A. Babs' Box Boutique 题目大意是给出不超过10 ...

  7. Regionals 2012, Asia - Jakarta 解题报告

    啥都不会做了.. 做题慢死 A.Grandpa's Walk 签到题. 直接DFS就行. 注意先判断这个点可以作为一个路径的起点不. 然后再DFS. 否则处理起来略麻烦 #include <io ...

  8. Regionals 2012, North America - Greater NY 解题报告

    这套题..除了几何的都出了 完全没时间学几何.杯具 A,B,J 水题不解释 C.Pen Counts 这题的话 写几个不等式限制边得范围就行了 然后枚举最小边 D.Maximum Random Wal ...

  9. 解题:NOI 2012 骑行川藏

    题面 入手点是每段路程中能量$e$与时间$t$的关系,$t-e$这个函数的导数对于各个路段一样,否则我们可以从导数大的一段路抽出一部分能量分给导数小的,这样会更优 毕姥爷在考场上的做法:猜一猜,然后拿 ...

随机推荐

  1. python—启动自带shell时报错(丢失api-ms-win-crt-runtime-l1-1-0.dll)已解决

    备注: 有的伙伴安装完1后重启,问题可以解决,summer儿在安装完1依然未能解决,于是又进行了2的安装再次重启后问题解决!! 1,安装vc-redist.x64,微软官网搜索免费下载,安装后重启. ...

  2. 6.openldap客户端安装

    作者:yaoyao 1.账号登录系统流程讲解 当在客户端输入账号登录系统时.系统根据/etc/nsswitch.conf配置文件获取账号查找顺序,然后在根据pam配置文件调用相关模块,对账号/etc/ ...

  3. T&F 圆桌:儿童智能玩具离我们还有多远?

    “女人和孩子的钱是最好挣的”,这句经典的名句被很多商家奉为信条,这在现实生活中也得到了很好的印证. 各种步行街.商业街.Mall 干的做多的事情就是:围绕着女人和孩子打造创造消费点.步行街.商业街上各 ...

  4. Ambiguous mapping. Cannot map 'labelInfoController' method

    使用springboot项目中,启动时出现Ambiguous mapping. Cannot map 'labelInfoController' method , 原因是,@RequestMappin ...

  5. Scrum Meeting 10.28

    今天大部分同学仍停留在学习阶段,进度快的同学已经在配置SQLserver. 成员 今日完成任务 明日计划 所用时间 徐越 配置SQLserver,试用java程序连接数据库 学习servlet,htt ...

  6. 2-Third Scrum Meeting-20151203

    任务安排 闫昊: 今日完成:请假.(编译+计组,压力有点大) 明日任务:设计本地数据库. 唐彬: 今日完成:请假.(编译+计组,压力有点大) 明日任务:阅读ios客户端代码. 史烨轩: 今日完成:请假 ...

  7. 《JavaScript》split和join

    首先了解split和join两个函数 split 根据条件截断字符串,返回数组 //str.split(option,length) 字符串转数组 //option:表示分割依据 //length:用 ...

  8. angularJS1笔记-(16)-模块里的constant、value、run

    index.html: <!DOCTYPE html> <html lang="en"> <head> <meta charset=&qu ...

  9. EF 小数位的保留

    问题描述:当采用EF的DbContext保存decimal类型数据到数据库,默认只会保存小数点后的前2位小数,其余均置0:例如保存101.182352152322,实际存到数据库里的数据为101.18 ...

  10. 《构建之法》第8,9,10章读后感&sprint1个人总结

    第8章 这一章主要介绍需求分析.具体说明了软件需求的类型.利益相关者,获取用户需求分析的常用方法与步骤.竞争性需求分析的框架NABCD,四象限方法以及项目计划和估计的技术.需求分析是决定一个软件的使用 ...