解题:POI 2012 Well
比较明显地能看出二分来,但是检查函数很难写。对于二分出的一个$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的更多相关文章
- 解题:POI 2012 Cloakroom
题面 首先,单独处理每个询问复杂度显然不可承受,还是考虑通过排序使得限制更容易达到:按照$a$将物品排序,按照$m$将询问排序,这样肯定是要不断添加物品才能达到要求,顺着做一遍就行了 然后发现$b$的 ...
- 【BZOJ 2803】【POI 2012】Prefixuffix
http://www.lydsy.com/JudgeOnline/problem.php?id=2803 核心思想是利用单调性. 因为长度为L的前缀和后缀循环同构是AB和BA的形式,我们设\(f(i) ...
- [ POI 2012 ] Letters
\(\\\) \(Description\) 给出两个长度为 \(N\) 的字符串\(S_1,S_2\),且保证两个字符串中每一个字符出现次数相同. 现在一次操作可以交换相邻的两个字符,问将 \(S_ ...
- POI题解整合
我也不知道为啥我就想把POI的题全都放到一篇blog里写完. POI 2005 SAM-Toy Cars 贪心,每次选下次出现最晚的. POI 2006 KRA-The Disks 箱子位置单调,所以 ...
- 解题:POI 2016 Nim z utrudnieniem
题面 出现了,神仙题! 了解一点博弈论的话可以很容易转化题面:问$B$有多少种取(diu)石子的方式使得取后剩余石子异或值为零且取出的石子堆数是$d$的倍数 首先有个暴力做法:$dp[i][j][k] ...
- 2012 East Central Regional Contest 解题报告
昨晚各种莫名其妙卡题. 不过细看这套题还挺简单的.全是各种暴力. 除了最后一道题计算几何看起来很麻烦的样子,其他题都是很好写的吧. A. Babs' Box Boutique 题目大意是给出不超过10 ...
- Regionals 2012, Asia - Jakarta 解题报告
啥都不会做了.. 做题慢死 A.Grandpa's Walk 签到题. 直接DFS就行. 注意先判断这个点可以作为一个路径的起点不. 然后再DFS. 否则处理起来略麻烦 #include <io ...
- Regionals 2012, North America - Greater NY 解题报告
这套题..除了几何的都出了 完全没时间学几何.杯具 A,B,J 水题不解释 C.Pen Counts 这题的话 写几个不等式限制边得范围就行了 然后枚举最小边 D.Maximum Random Wal ...
- 解题:NOI 2012 骑行川藏
题面 入手点是每段路程中能量$e$与时间$t$的关系,$t-e$这个函数的导数对于各个路段一样,否则我们可以从导数大的一段路抽出一部分能量分给导数小的,这样会更优 毕姥爷在考场上的做法:猜一猜,然后拿 ...
随机推荐
- 虚拟机中安装MAC OS X教程(适用所有电脑方法,特别是cpu不支持硬件虚拟化的电脑)
前言 之前写了一篇在Windows上搭建Object-C开发环境,并且写了一个HelloWorld程序.但真正开发苹果软件是在MAC OS X系统中(以下简称OSX)中.买不起MacBook,也没有O ...
- java按照字节切割字符串,解决汉字的问题
编写一个截取字符串的函数,输入为一个字符串,截取开始地址,截取字节数,输出为按字节截取的字符串. 但是要保证汉字不被截半个, 如“我ABC”,0,4,应该截为“我AB”,输入“我ABC汉DEF”,1, ...
- hadoop之定制自己的sort过程
Key排序 1. 继承WritableComparator 在hadoop之Shuffle和Sort中,可以看到mapper的输出文件spill文件需要在内存中排序,并且在输入reducer之前,不同 ...
- lambda----jdk8重头戏
简介(译者注:虽然看着很先进,其实Lambda表达式的本质只是一个"语法糖",由编译器推断并帮你转换包装为常规的代码,因此你可以使用更少的代码来实现同样的功能.本人建议不要乱用,因 ...
- 阿里nas挂载错误
报错如下,解决:yum install nfs-utils 即可 mount: wrong fs type, bad option, bad superblock on 12080482f3-qra4 ...
- 互评Beta版本——杨老师粉丝群——Pinball
互评beta版本 杨老师粉丝群——<PinBall> 一.基于NABCD评论作品,及改进建议 1.根据(不限于)NABCD评论作品的选题 (1)N(Need,需求) 随着年龄的增长, ...
- youi软件测试计划
beta版本中,我们将重视软件开发中的测试. 我们的软件是需要测试的,不测试怎么知道好与不好呢?有的程序不测试甚至都不能运行-- 我们的目标呢:就是经过测试之后软件的质量得到有效的保证.不管什么情况都 ...
- Task 6.2冲刺会议五 /2015-5-18
今天继续深入的看了看服务器的内容,修改了昨天的代码,发现网络编程还是很好玩的,感觉他的代码比平常写的更有趣一点,另外登陆界面也稍微看了一点.明天准备把登陆界面完善一下.
- Codeforces Round #258 (Div. 2) 容斥+Lucas
题目链接: http://codeforces.com/problemset/problem/451/E E. Devu and Flowers time limit per test4 second ...
- 虚拟机环境下DPDK运行时的一些错误解决
在绑定网卡到DPDK模块时 报错 :is active. Not modifying Routing table indicates that interface 0000:02:01.0 is ac ...