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的更多相关文章
随机推荐
- Graph 133. Clone Graph in three ways(bfs, dfs, bfs(recursive))
Clone an undirected graph. Each node in the graph contains a label and a list of its neighbors. OJ's ...
- CSAPP buffer lab记录——IA32版本
CSAPP buffer lab为深入理解计算机系统(原书第二版)的配套的缓冲区溢出实验,该实验要求利用缓冲区溢出的原理解决5个难度递增的问题,分别为smoke(level 0).fizz(level ...
- 使用ViewPager和FragmentPagerAdapter实现Tab
前面我们分别利用ViewPager和Fragment实现了Tab效果.但是使用Fragment实现的Tab不能够左右滑动.如果我们既想使用Fragment又想让Tab能够滑动,那么怎么办呢?这 就是今 ...
- luogu3368树状数组模板2
题目链接:https://www.luogu.org/problemnew/show/P3368 题意:与模板1不同的是这题的操作是树状数组并不在行的区间更新和单点查找,如果按照模板1那样写肯定会T. ...
- PHP使用in_array函数检查数组中是否存在某个值
PHP使用 in_array() 函数检查数组中是否存在某个值,如果存在则返回 TRUE ,否则返回 FALSE. bool in_array( mixed needle, array array [ ...
- Web网站高并发量的解决方案
摘要: 一个小型的网站,可以使用最简单的html静态页面就实现了,配合一些图片达到美化效果,所有的页面均存放在一个目录下,这样的网站对系统架构.性能的要求都很简单.随着互联网业务的不断丰富,网站相 ...
- JavaScript小游戏--2048(移动端)
HTML5中新添加了很多事件,但是由于他们的兼容问题不是很理想,应用实战性不是太强,所以在这里基本省略,咱们只分享应用广泛兼容不错的事件,日后随着兼容情况提升以后再陆续添加分享.今天为大家介绍的事件主 ...
- HDU 1017A Mathematical Curiosity (暴力统计特殊要求个数)
传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1017 A Mathematical Curiosity Time Limit: 2000/1000 M ...
- C语言中内存分配
C语言中内存分配 在任何程序设计环境及语言中,内存管理都十分重要.在目前的计算机系统或嵌入式系统中,内存资源仍然是有限的.因此在程序设计中,有效地管理内存资源是程序员首先考虑的问题. 第1节主要 ...
- HDFS Federation(转HDFS Federation(HDFS 联盟)介绍 CSDN)
转载地址:http://blog.csdn.net/strongerbit/article/details/7013221 HDFS Federation(HDFS 联盟)介绍 1. 当前HDFS架构 ...