2792: [Poi2012]Well

Time Limit: 40 Sec  Memory Limit: 64 MB
Submit: 137  Solved: 61
[Submit][Status][Discuss]

Description

给出n个正整数X1,X2,...Xn,可以进行不超过m次操作,每次操作选择一个非零的Xi,并将它减一。

最终要求存在某个k满足Xk=0,并且z=max{|Xi - Xi+1|}最小。
输出最小的z和此时最小的k。
 
 
 

Input

第一行两个正整数n, m (1<=n<=1,000,000, 1<=m<=10^18)。第二行n个正整数X1,X2,...Xn (Xi<=10^9)。
 
 
 

Output

输出k和z。数据保证方案一定存在。
 
 
 

Sample Input

16 15
8 7 6 5 5 5 5 5 6 6 7 8 9 7 5 5

Sample Output

1 2

HINT

将X序列变为

0 2 4 5 5 5 5 5 6 6 7 8 9 7 5 5
 
此时k=1,z=2,共操作了8+5+2=15次。
 

Source

[Submit][Status][Discuss]

要求最小化最大值,肯定想到二分。

二分判定的难点在于如何求最小的能等于0的数。

假如要把i位置变成0,则一定会修改一个区间[L,R]

所以必须满足a[L]>(i-L)*mid,且a[R]>(R-i)*mid

这两个显然都是单调的,然后[L,R]这个区间要想修改最小的话,最后一定变成前后两个等差数列,其中公差=mid,第i项=0,直接统计答案即可。

 #include<cstdio>
#include<algorithm>
#define N 1000010
#define mid (l+r>>1)
#define ll long long
using namespace std;
int n,a[N],b[N];
ll m,f[N],sum[N];
inline int check(int x)
{
ll ans=;
for(int i=;i<=n;i++)b[i]=a[i];
for(int i=;i<=n;i++)
if(b[i]-b[i-]>x)
ans+=b[i]-b[i-]-x,b[i]=b[i-]+x;
for(int i=n-;i;i--)
if(b[i]-b[i+]>x)
ans+=b[i]-b[i+]-x,b[i]=b[i+]+x;
for(int i=;i<=n;i++)
sum[i]=sum[i-]+b[i];
if(ans>m)return ;
for(int i=,j=;i<=n;i++)
{
while(j<i&&b[j]<=(ll)(i-j)*x)j++;
f[i]=sum[i-]-sum[j-]-(ll)(i-j)*(i-j+)/*x;
}
for(int i=n,j=n;i;i--)
{
while(j>i&&b[j]<=(ll)(j-i)*x)j--;
f[i]+=sum[j]-sum[i]-(ll)(j-i)*(j-i+)/*x;
}
for(int i=;i<=n;i++)
if(b[i]+f[i]+ans<=m)return i;
return ;
}
int main()
{
int l=,r=,ans=;
scanf("%d%lld",&n,&m);
for(int i=;i<=n;i++)
scanf("%d",&a[i]),r=max(r,a[i]);
while(l<=r)
{
if(check(mid))ans=mid,r=mid-;
else l=mid+;
}
printf("%d %d",check(ans),ans);
}

[BZOJ2792][Poi2012]Well的更多相关文章

  1. POI2012题解

    POI2012题解 这次的完整的\(17\)道题哟. [BZOJ2788][Poi2012]Festival 很显然可以差分约束建图.这里问的是变量最多有多少种不同的取值. 我们知道,在同一个强连通分 ...

  2. 【BZOJ2792】[Poi2012]Well 二分+双指针法

    [BZOJ2792][Poi2012]Well Description 给出n个正整数X1,X2,...Xn,可以进行不超过m次操作,每次操作选择一个非零的Xi,并将它减一. 最终要求存在某个k满足X ...

  3. 2795: [Poi2012]A Horrible Poem

    2795: [Poi2012]A Horrible Poem Time Limit: 50 Sec  Memory Limit: 128 MBSubmit: 484  Solved: 235[Subm ...

  4. [BZOJ2803][Poi2012]Prefixuffix

    2803: [Poi2012]Prefixuffix Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 219  Solved: 95[Submit][St ...

  5. [BZOJ2799][Poi2012]Salaries

    2799: [Poi2012]Salaries Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 91  Solved: 54[Submit][Statu ...

  6. [BZOJ2797][Poi2012]Squarks

    2797: [Poi2012]Squarks Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 211  Solved: 89[Submit][Status ...

  7. [BZOJ2791][Poi2012]Rendezvous

    2791: [Poi2012]Rendezvous Time Limit: 25 Sec  Memory Limit: 128 MBSubmit: 95  Solved: 71[Submit][Sta ...

  8. [BZOJ2795][Poi2012]A Horrible Poem

    2795: [Poi2012]A Horrible Poem Time Limit: 50 Sec  Memory Limit: 128 MBSubmit: 261  Solved: 150[Subm ...

  9. [BZOJ2794][Poi2012]Cloakroom

    2794: [Poi2012]Cloakroom Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 167  Solved: 119[Submit][St ...

随机推荐

  1. 重温WCF之消息拦截与篡改(八)

    我们知道,在WCF中,客户端对服务操作方法的每一次调用,都可以被看作是一条消息,而且,可能我们还会有一个疑问:如何知道客户端与服务器通讯过程中,期间发送和接收的SOAP是什么样子.当然,也有人是通过借 ...

  2. 编程风格规范google版

    python's  coding style,google 命名

  3. hdu 4025 2011上海赛区网络赛E 压缩 ***

    直接T了,居然可以这么剪枝 题解链接:点我 #include<cstdio> #include<map> #include<cstring> #define ll ...

  4. 64位ubuntu下重新编译hadoop2.2流水账

    hadoop官方网站中只提供了32位的hadoop-2.2.0.tar.gz,如果要在64位ubuntu下部署hadoop-2.2.0,就需要重新编译源码包,生成64位的部署包.建议以下操作使用roo ...

  5. JAVA安装,环境变量配置

    JAVA环境变量设置 PATH %JAVA_HOME%\bin JAVA_HOME D:\ProgramFiles\Java\jdk1.6.0_10 CLASSPATH .;%JAVA_HOME%\l ...

  6. connot resolve symbol R

    出现这个原因大都是layout里的xml文件出错,就不会自动生成R文件

  7. Android 退出Activity

    在一个Process或一个处理线程中退出Activity可以用context来退出,如下: ((Activity)context).finish(); Android程序有很多Activity,比如说 ...

  8. AOP动态代理解析3-增强方法的获取

    对于指定bean的增强方法的获取一定是包含两个步骤的: 获取所有的增强 寻找所有增强中使用于bean的增强并应用 那么findCandidateAdvisors与findAdvisorsThatCan ...

  9. mvc-10部署

    性能 提高性能最简单的办法就是减少HTTP的请求数量,每个HTTP请求除了有TCP开销外,还包含大量的头信息: 让页面和其资源文件保持较小的体积将减少网络用时,对于互联网上的应用而言,这才是真正的瓶颈 ...

  10. [xsd学习]xsd实例

    以下为一个表示学校的xml文件,学校内有若干学生,每个学生都有基本信息,电脑信息,选课信息 <?xml version="1.0" encoding="UTF-8& ...