BZOJ2600_ricehub_KEY
这道题一开始我还以为是贪心,sort一遍直接取中点然后求最优值。
但写了之后才发现错误,设置的谷仓只要是一段区间的中点即可。这段区间的两端一定是两片谷田。
所以枚举区间的左端点,二分右端点,但问题是如何O(1)判断?
设sumi表示1~i点的和。
L~R区间所需要的费用分成两段来求。
一段为L~mid-1,一段为mid+1~R。
L~mid-1=a[mid]*(mid-l)-(sum[k-1]-sum[l-1]);
mid+1~R=sum[r]-sum[k]-a[k]*(r-k);
两者相加即为这段区间的费用总和。
code:
#include <cstdio>
#include <algorithm>
using namespace std; int read()
{
char c;while(c=getchar(),c<''||c>'');int x=c-'';
while(c=getchar(),c>=''&&c<='')x=x*+c-'';
return x;
} int abs(int x){return x>?x:-x;} const int MAXN=; int R,L,a[MAXN],i,ans;
long long B,sum[MAXN]; int find(int l,int r)
{
long long w=,k=l+r+>>;
w=a[k]*(k-l)-(sum[k-]-sum[l-])+sum[r]-sum[k]-a[k]*(r-k);
return w<=B;
} int check(int x)
{
int l=x,r=R,mid,tot;
while(l<=r){
mid=l+r>>;
if(find(x,mid))l=mid+,tot=mid;
else r=mid-;
}
return tot-x+;
} int main()
{
// freopen("x.txt","r",stdin);
R=read(),L=read();scanf("%lld",&B);
for(i=;i<=R;i++)a[i]=read(),sum[i]=sum[i-]+a[i];
for(i=;i<=R;i++){
ans=max(ans,check(i));
}
printf("%d",ans);
return ;
}
BZOJ2600_ricehub_KEY的更多相关文章
随机推荐
- MATLAB入门学习(整合)
整合一下,都是链接地址: MATLAB入门学习(一):初次使用.. MATLAB入门学习(二):矩阵相关 MATLAB入门学习(三):矩阵常用函数 MATLAB入门学习(四):编写简单.m文件和函数文 ...
- java的foreach,后台弹框
for (String string : list) { if(string.equals(ids)){ int res = JOptionPane.showConfirmDialog(null, & ...
- C# Path类 FileStream(文件流) 与 File(文件) 读取的区别
1.采用文件流读取数据是一点一点从文件中读取数据对内存的压力相对较小;而采用文件读取数据是一下全部读取过来对内存造成的压力相对较大 2.File读取: string str = @"E:\Q ...
- 在WinCE上播放声音、设置透明图片、系统音量 C#
记录一下用到的C#在WinCE平台上的相关技巧备查 1.C#在WinCE上实现透明图片 1 2 3 4 5 6 7 8 9 using System.Drawing.Imaging; pu ...
- 去掉Win7资源管理器左侧不需要的项目
通过修改注册表去掉win7资源管理器左侧你不喜欢的项目: 1,打开注册表WIN+R, 输入:regedit 2,找到HKEY_CLASSES_ROOT \ CLSID \, 再找到对应项, 其包含一个 ...
- Code First 二 DataAnnotation 数据注解
Code-First中配置域类 我们在前一节学习了默认的代码优先约定.Code-First使用默认约定从您的域类构建概念模型.Code-First利用称为约定而不是配置的编程模式.这意味着您可以通过配 ...
- linux内存管理---虚拟地址、逻辑地址、线性地址、物理地址的区别(一)
分析linux内存管理机制,离不了上述几个概念,在介绍上述几个概念之前,先从<深入理解linux内核>这本书中摘抄几段关于上述名词的解释: 一.<深入理解linux内核>的解释 ...
- java.sql.date和java.util.date的区别和转换
不同点:java.util.Date是在除了SQL语句的情况下面使用的.java.sql.Date是针对SQL语句使用的,它只包含日期而没有时间部分java.util.Date 是 java.sql. ...
- chromium之scoped_ptr
看看怎么使用 // Scopers help you manage ownership of a pointer, helping you easily manage the // a pointer ...
- GitHub Desktop 拉取 GitHub上 Tag 版本代码
一直在使用 GitHub Desktop 图形化 git 管理工具,统一项目框架版本时需要切换到ThinkPHP Tag 分支版本,步骤如下, 1,先在 GitHub 中找到需要的版本,点进去 2,点 ...