BZOJ 2792 Poi2012 Well 二分答案
题目大意:给定一个非负整数序列A。每次操作能够选择一个数然后减掉1,要求进行不超过m次操作使得存在一个Ak=0且max{Ai−Ai+1}最小,输出这个最小值以及此时最小的k
二分答案,然后验证的时候首先让相邻的都不超过x。然后枚举哪个点应该改成0
假设某个点须要改成0,那么须要进行操作的位置是一段区间。左右端点都单调,扫两遍即可了
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define M 1001001
using namespace std;
int n,pos,a[M];
long long m;
bool Judge(long long limit)
{
long long cost=0;
int i,j;
static int b[M];
for(i=1;i<=n;i++)
b[i]=a[i];
for(i=2;i<=n;i++)
if(b[i]-b[i-1]>limit)
{
cost+=b[i]-b[i-1]-limit;
b[i]=b[i-1]+limit;
}
for(i=n-1;i;i--)
if(b[i]-b[i+1]>limit)
{
cost+=b[i]-b[i+1]-limit;
b[i]=b[i+1]+limit;
}
if(cost>m) return false;
static long long sum[M];
for(i=1;i<=n;i++)
sum[i]=sum[i-1]+b[i];
static int l[M],r[M];
for(j=1,i=1;i<=n;i++)
{
while( b[j]<(long long)(i-j)*limit )
j++;
l[i]=j;
}
for(j=n,i=n;i;i--)
{
while( b[j]<(long long)(j-i)*limit )
j--;
r[i]=j;
}
for(i=1;i<=n;i++)
{
long long _cost=(sum[r[i]]-sum[l[i]-1]);
_cost-=(long long)limit*(i-l[i])*(i-l[i]+1)>>1;
_cost-=(long long)limit*(r[i]-i)*(r[i]-i+1)>>1;
if(cost+_cost<=m)
return pos=i,true;
}
return false;
}
int Bisection()
{
int l=0,r=1000000000;
while(r-l>1)
{
int mid=l+r>>1;
if( Judge(mid) )
r=mid;
else
l=mid;
}
return Judge(l)?l:r;
}
int main()
{
#ifdef PoPoQQQ
freopen("stu_tests\\stu4c.in","r",stdin);
#endif
int i;
cin>>n>>m;
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
int ans=Bisection();
Judge(ans);
cout<<pos<<' '<<ans<<endl;
return 0;
}
BZOJ 2792 Poi2012 Well 二分答案的更多相关文章
- bzoj 2792 [Poi2012]Well 二分+dp+two_pointer
题目大意 给出n个正整数X1,X2,...Xn,可以进行不超过m次操作,每次操作选择一个非零的Xi,并将它减一. 最终要求存在某个k满足Xk=0,并且z=max{|Xi - Xi+1|}最小. 输出最 ...
- BZOJ_2792_[Poi2012]Well_二分答案
BZOJ_2792_[Poi2012]Well_二分答案 Description 给出n个正整数X1,X2,...Xn,可以进行不超过m次操作,每次操作选择一个非零的Xi,并将它减一. 最终要求存在某 ...
- BZOJ 2525 Poi2011 Dynamite 二分答案+树形贪心
题目大意:给定一棵树,有一些点是关键点,要求选择不超过mm个点.使得全部关键点到近期的选择的点距离最大值最小 二分答案,问题转化为: 给定一棵树,有一些点是关键点,要求选择最少的点使得每一个关键点到选 ...
- BZOJ 1816: [Cqoi2010]扑克牌( 二分答案 )
二分答案.. 一开始二分的初始右边界太小了然后WA,最后一气之下把它改成了INF... -------------------------------------------------------- ...
- bzoj 2792: [Poi2012]Well【二分+贪心】
#include<iostream> #include<cstdio> #include<algorithm> using namespace std; const ...
- bzoj 3993 星际战争 - 二分答案 - 最大流
3333年,在银河系的某星球上,X军团和Y军团正在激烈地作战.在战斗的某一阶段,Y军团一共派遣了N个巨型机器人进攻X军团的阵地,其中第i个巨型机器人的装甲值为Ai.当一个巨型机器人的装甲值减少到0或者 ...
- [POI2012]STU-Well(二分答案+神仙操作)
给定一个非负整数序列A,每次操作可以选择一个数然后减掉1,要求进行不超过m次操作使得存在一个Ak=0且max{|Ai−Ai+1|}最小,输出这个最小lk以及最小值. Solution 最大值最小,显然 ...
- BZOJ 2654 tree(二分答案+并查集)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2654 [题目大意] 给你一个无向带权连通图,每条边是黑色或白色. 让你求一棵最小权的恰 ...
- BZOJ 2654: tree Kruskal+二分答案
2654: tree Time Limit: 30 Sec Memory Limit: 512 MBSubmit: 1863 Solved: 736[Submit][Status][Discuss ...
随机推荐
- 并查集【p1197】[JSOI2008]星球大战
Description 很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武器统治着整个星系. 某一天,凭着一个偶然的机遇,一支反抗军摧毁了帝国的超级武器,并攻下了星系中几乎所有的星球.这些星球通 ...
- Ubuntu开机启动的方式
方法一:--------------------------------------------------1. 在/etc/init.d/下放置启动脚本,比如postgresqlroot@ubunt ...
- 表(Table)
虽然我们已经将不同用途的物品保存在不同的仓库中了,但是在同一个仓库中数据的保存仍然存在问题.比如食品分为熟食.生肉.大米等,如果把他们随意的堆放在一起,就会造成我们无法很容易的对这些食品进行管理,当要 ...
- Oracle 后台进程
一.基本后台进程 1.数据库写入进程(DBWn): 数据库写入程序讲数据库告诉缓存区中的修改块写入数据文件.对于多数系统来说,一个数据库写入程序(DBW0)就已经足够,但是对于 ...
- 博弈论与SG函数
巴什博奕: 两个顶尖聪明的人在玩游戏,有n个石子,每人可以随便拿1−m个石子,不能拿的人为败者,问谁会胜利 结论: 设当前的石子数为\(n=k∗(m+1)\)即\(n%(m+1)==0\)时先手一定失 ...
- MSGPACK序列和还原TFDParams
MSGPACK序列和还原TFDParams unit Unit1; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, S ...
- 【FTP】java FTPClient 文件上传内容为空,文件大小为0
问题:如题所述,使用FTPClient上传至FTP服务器, 表现如下:①文件大小为0 ②上传很小的文件,但是要花费很长的时间,20K要花费2分钟甚至更久 ③没有任何的报错,没有任何的乱码 解决方法: ...
- 自定义WebViewPage,实现Url.Action生成绝对地址
前言 运营部门一直对公司官网SEO有意见,认为做得不好(说得好像运营做不好都是seo似的).为此两部门老大还闹到CEO那去了. 也因为这事,工作计划终于排上日程.沟通一番后得知有如下几点需求: 1.所 ...
- WebLogic MBean Monitor
weblogic server提供了一个dashboard让我们对mbean进行图形化的展现和分析,地址是 http://localhost:7001/console/dashboard 但有时候总是 ...
- 用Thunderbird以HTML发邮件,收件人却总是收到文本邮件
要在通讯录里面,把你要发送的人设置可以接收HTML格式的邮件,那么你才能发出HTML格式. 否则,Thunderbird默认你所发的收件人无法接收HTML格式邮件.