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的更多相关文章
随机推荐
- Linux汉化(Cent Os汉化)
在腾讯云上购买了Cent Os7.1的云服务器,是英文版啊,有没有?对于我这种英文的渣渣啊,所以我要用中文版,我就是这么low,怎么着呢? Ok ,在汉化之前,先查看系统的语言环境, echo $LA ...
- phonegap的照相机 API
一. Camera Api 简单介绍 Camera 选择使用摄像头拍照,或从设备相册中获取一张照片.图片以 base64 编码的 字符串或图片 URI 形式返回. 方法: 1. camera.getP ...
- SG函数&&SG定理
必胜点和必败点的概念: P点:必败点,换而言之,就是谁处于此位置,则在双方操作正确的情况下必败. N点:必胜点,处于此情况下,双方操作均正确的情况下必胜. 必胜点和必败点的 ...
- OpenXml操作Excel
要使用OpenXml首先要下载最新的Open XML Format SDK 2.0.具体的导入openxml的dll,去网上搜,很多 1.我个人写的XmlHelp类 using System; usi ...
- BZOJ2816:[ZJOI2012]网络(LCT)
Description 有一个无向图G,每个点有个权值,每条边有一个颜色.这个无向图满足以下两个条件: 对于任意节点连出去的边中,相同颜色的边不超过两条. 图中不存在同色的环,同色的环指相同颜色的边构 ...
- php 中输出字符串时怎么换行?
<?php //php 不同系统的换行 //不同系统之间换行的实现是不一样的 //linux 与unix中用 /n //MAC 用 /r //window 为了体现与linux不同 则是 /r/ ...
- HDU 6464 免费送气球 【权值线段树】(广东工业大学第十四届程序设计竞赛)
传送门:http://acm.hdu.edu.cn/showproblem.php?pid=6464 免费送气球 Time Limit: 2000/1000 MS (Java/Others) M ...
- WCF 双向通讯实例-简易的聊天程序
源码下载 程序分四个部分: 1.原理 使用WCF的nettcp绑定.nettcp绑定类似原来的RPC,即.net remoting,只是在WCF提供统一协定,同一服务可以拥有多种客户端. 2.代码展示 ...
- LeetCode18.四数之和 JavaScript
给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a + b + c + d 的值与 target 相等?找出所有满 ...
- position定位笔记
position定位 position一共有四个可选属性:static/relative/absolute/fixed 代码: <style type="text/css"& ...