题意

https://vjudge.net/problem/CodeForces-460C

一个长度为 n 的序列 a ,你有 m 次操作的机会,每次操作是将其中连续的 w 个元素增加 1 。最大化最终序列的最小值。

思路

最大化最小值,二分的套路题。

数据范围1e5,所以我们要O(n)check。

如何能做到O(n)?

差分!

求出查分数组后,差分的前缀和就是原数组,如果我们要check(x),那么每当前缀和<x时,就要c[i]+=(x-s),c[i+w]-=(x-s),因为可以连续给w个元素加1,所以在i+w的地方减去相应值,这样可以最大化利用这个w,最后我们判断累计的x-s是否小于等于m即可。

注意每次二分后要还原差分数组!!

代码

#include<bits/stdc++.h>
using namespace std;
#define inf 0x3f3f3f3f
#define ll long long
const int N=200005;
const int mod=1e9+7;
const double eps=1e-8;
const double PI = acos(-1.0);
#define lowbit(x) (x&(-x))
ll gcd(ll a,ll b){return b==0?a:gcd(b,a%b);}
ll qpow(ll a,ll b){ll res=1;while(b){if(b&1) res=res*a%mod;a=a*a%mod;b>>=1;}return res;}
ll inv(ll a,ll p){return qpow(a,p-2);}
ll read()
{
ll x=0;
char ch=getchar();
while(!isdigit(ch))
{
ch=getchar();
}
while(isdigit(ch))
{
x=x*10+(ch-'0');
ch=getchar();
}
return x;
}
int n,m,w;
ll a[N],c[N];
bool check(ll x)
{
ll sum=0,res=0;
for(int i=1;i<=n;i++)
{
sum+=c[i];
if(sum<x)
{
res+=x-sum;
c[i]+=(x-sum);
if(i+w<=n)
c[i+w]-=(x-sum);
sum=x;
}
}
for(int i=1;i<=n;i++)
c[i]=a[i]-a[i-1];
return res<=m;
}
int main()
{
std::ios::sync_with_stdio(false);
n=read(),m=read(),w=read();
for(int i=1;i<=n;++i)
{
a[i]=read();
c[i]=a[i]-a[i-1];
}
ll l=1,r=1e14,mid,ans;
while(l<=r)
{
mid=(l+r)>>1;
if(check(mid))
{
l=mid+1;
ans=mid;
}
else
r=mid-1;
}
printf("%lld\n",ans);
return 0;
}

  

最新文章

  1. OS存储器管理(一)
  2. Xenia and Weights(深度优先搜索)
  3. yjfk 意见反馈
  4. linux web php 安全相关设置
  5. MEF 编程指南(一):在应用中托管 MEF
  6. S2SH商用后台权限系统第一讲
  7. Ubuntu下嵌入式Qt开发环境配置全攻略
  8. Java UML描述
  9. MySQL 行锁 表锁机制
  10. C#之面向对象的特性
  11. [C]C语言中的指针和内存泄漏几种情况
  12. mybatis --- 如何相互转换逗号分隔的字符串和List
  13. Linux 系统级开启文件句柄 调优
  14. CSS-精灵图片的使用(从一张图片中截图指定位置图标)
  15. The Cat in the Hat POJ - 1289
  16. jmeter之正则表达式
  17. Revit API 判断一个构件在某个视图中的可见性
  18. WPF 初学VisifireChart
  19. 017.Zabbix宏介绍
  20. mysqlDOS命令

热门文章

  1. numpy的基本API(二)——维数操作
  2. 基于iCamera测试高清摄像头OV7725小结
  3. 【React】360- 完全理解 redux(从零实现一个 redux)
  4. 【玩转SpringBoot】配置文件yml的正确打开姿势
  5. wxxcx_learn
  6. wxxcx_learn异常处理
  7. inline以及inline-block行内元素:vertical-align属性
  8. 【Java Web开发学习】Spring MVC整合WebSocket通信
  9. [权限管理系统篇] (五)-Spring security(授权过程分析)
  10. Linux系统基础知识