化简式子

$M>=m+ans*(r-l+k)$

发现$M,m$确定时,总区间长度越小越好,于是假定右端点为最小值$M+ans*l>=m+ans*r+ans*k$,

右面都确定了,但最大值仍然有两种情况,一是最大值就在要求的区间内,二是在要求的区间右侧,

对于第一种情况,直接把每个点的val扔进单调队列就可以了,第二种呢,因为要求区间长度最小,所以左端点即为$r-L+1$,单调队列维护$i-L+1~i$的最大值即可,

左端点为最小值也一样。

而且不需要判断在我们选的区间内是否有比$a[i]$更小的,因为那一定比这优,考虑过,

所以每次check直接正反扫就好了。

2017.11.7更新

原程序被hack,因为如果只能全选的话,最小值又不在两边,就不会枚举到最优解,所以强行往两侧各添加n个0即可。

代码已更正,可放心食用

 #include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<cmath>
#define N 150050
#define eps 1e-6
using namespace std;
int n,l,r,k;
int a[N];
double val[N];
int q1[N],q2[N],head1,head2,tail1,tail2;
bool check(double x){
head1=head2=;
tail1=tail2=;
for(int i=;i<=*n;i++){
int pos=i-l+;
double now=-;
if(pos>){
val[pos]=a[pos]+x*pos;
while(head1<=tail1&&val[pos]>val[q1[tail1]])tail1--;
q1[++tail1]=pos;
while(head1<=tail1&&q1[head1]<=i-r)head1++;
now=max(now,val[q1[head1]]);
}
while(head2<=tail2&&a[i]>a[q2[tail2]])tail2--;
q2[++tail2]=i;
while(head2<=tail2&&q2[head2]<=i-l)head2++;
if(i>n&&pos>){
now=max(now,a[q2[head2]]+x*(i-l+));
if(now>=a[i]+x*(i+k))return ;
}
}
head1=head2=;
tail1=tail2=;
for(int i=*n;i>=n+;i--){
int pos=i+l-;
double now=-;
if(pos<=*n){
val[pos]=a[pos]-x*pos;
while(head1<=tail1&&val[pos]>val[q1[tail1]])tail1--;
q1[++tail1]=pos;
while(head1<=tail1&&q1[head1]>=i+r)head1++;
now=max(now,val[q1[head1]]);
}
while(head2<=tail2&&a[i]>a[q2[tail2]])tail2--;
q2[++tail2]=i;
while(head2<=tail2&&q2[head2]>=i+l)head2++;
if(i<=*n&&pos<=*n){
now=max(now,a[q2[head2]]-x*(i+l-));
if(now>=a[i]-x*(i-k))return ;
}
}
return ;
}
int main(){
int T;scanf("%d",&T);
while(T--){
scanf("%d%d%d%d",&n,&k,&l,&r);
for(int i=n+;i<=*n;i++)scanf("%d",&a[i]);
double L=,R=,M;
while(L+eps<R){
M=(L+R)/2.0;
if(check(M))L=M;
else R=M;
}
printf("%0.4lf\n",M);
}
return ;
}

bzoj4476

bzoj4476 [Jsoi2015]送礼物的更多相关文章

  1. [BZOJ4476] [JSOI2015] 送礼物 (01分数规划+ST表)

    [BZOJ4476] [JSOI2015] 送礼物 (01分数规划+ST表) 题面 给出n,k,l,r和序列a,要求从a中选一段连续的区间[i,j]出来,使得M(i,j)-m(i,j)/(j-i+k) ...

  2. BZOJ4476 JSOI2015送礼物(分数规划+单调队列)

    看到这个式子当然先二分答案.得max-min-(j-i+k)ans>=0. 显然max-min相同的情况下所选区间长度越短越好,所以max和min都应该取在边界.那么实际上我们根本不用管端点是否 ...

  3. [BZOJ4476][JSOI2015]送礼物[分数规划+单调队列]

    题意 题目链接 分析 分数规划之后可以得到式子:\(max-min-r*mid+l*mid\geq k*mid\) . 贪心选择,肯定区间的端点是极小或者极大值.特殊处理区间长度 \(\leq L\) ...

  4. 【BZOJ4476】[Jsoi2015]送礼物 分数规划+RMQ

    [BZOJ4476][Jsoi2015]送礼物 Description JYY和CX的结婚纪念日即将到来,JYY来到萌萌开的礼品店选购纪念礼物.萌萌的礼品店很神奇,所有出售的礼物都按照特定的顺序都排成 ...

  5. BZOJ_4476_[Jsoi2015]送礼物_01分数规划+单调队列

    BZOJ_4476_[Jsoi2015]送礼物_01分数规划+单调队列 Description JYY和CX的结婚纪念日即将到来,JYY来到萌萌开的礼品店选购纪念礼物. 萌萌的礼品店很神奇,所有出售的 ...

  6. P6087 [JSOI2015]送礼物 01分数规划+单调队列+ST表

    P6087 [JSOI2015]送礼物 01分数规划+单调队列+ST表 题目背景 \(JYY\) 和 \(CX\) 的结婚纪念日即将到来,\(JYY\) 来到萌萌开的礼品店选购纪念礼物. 萌萌的礼品店 ...

  7. luogu P6087 [JSOI2015]送礼物 二分 单调队列 决策单调性

    LINK:送礼物 原本想了一个 \(nlog^2\)的做法 然后由于线段树常数过大 T到30. 以为这道题卡\(log^2\)没想到真的有神仙写\(log^2\)的过了 是我常数大了 抱歉. 能过的\ ...

  8. JSOI 2015 送礼物

    [BZOJ4476] [JSOI2015]送礼物 Description JYY和CX的结婚纪念日即将到来,JYY来到萌萌开的礼品店选购纪念礼物. 萌萌的礼品店很神奇,所有出售的礼物都按照特定的顺序都 ...

  9. 「JSOI2015」送礼物

    「JSOI2015」送礼物 传送门 看到这题首先想到分数规划. 我们发现对于当前区间,如果它的最大值和最小值不是分居区间的两个端点的话,那么我们显然可以把两端多出去的部分舍掉,因为,在区间最大值最小值 ...

随机推荐

  1. [51nod 1515] 明辨是非

    Description 给\(n\)组操作,每组操作形式为\(x\;y\;p\). 当\(p\)为\(1\)时,如果第\(x\)变量和第\(y\)个变量可以相等,则输出\(YES\),并限制他们相等: ...

  2. 面向对象(this的问题二)

    <!DOCTYPE HTML><html><head><meta http-equiv="Content-Type" content=&q ...

  3. IdentityServer4实战 - AccessToken 生命周期分析

    一.前言 IdentityServer4实战这个系列主要介绍一些在IdentityServer4(后文称:ids4),在实际使用过程中容易出现的问题,以及使用技巧,不定期更新,谢谢大家关注.使用过id ...

  4. Modelsim中使用TCL脚本编写do文件实现自动化仿真

    通常我们使用Modelsim进行仿真,是通过图形界面点点点来进行操作,殊不知Modelsim完美支持TCL脚本语言及批处理命令do文件.简单来说就是从你修改完代码后到你重新编译把需要的信号拉出来查看, ...

  5. window.open open new window?

    when ever i use window.location.href=//some url it always open a new window, this only happens when ...

  6. Android Studio集成Lombok Plugin

    Lombok是Android Studio名列前茅的插件,有啥用,看这个:http://www.blogjava.NET/fancydeepin/archive/2012/07/12/lombok.h ...

  7. Visual Studio Live Share不完全指北

    Visual Studio Live Share是什么? 是VS的一个实时协作开发的扩展工具. github地址:https://github.com/MicrosoftD...文档地址:https: ...

  8. Spring Cloud(十二):分布式链路跟踪 Sleuth 与 Zipkin【Finchley 版】

    Spring Cloud(十二):分布式链路跟踪 Sleuth 与 Zipkin[Finchley 版]  发表于 2018-04-24 |  随着业务发展,系统拆分导致系统调用链路愈发复杂一个前端请 ...

  9. 类设计:设计卖车的4S店

    class Car(object): # 定义车的方法 def move(self): print('---车在移动---') def stop(self): print('---停车---') # ...

  10. cocos2d-x_ Windows下Android环境搭建

    在Windows环境下编译cocos2d-x-3.0 Android-NDK编译:cocos2d-x(二) Mac 下搭建:http://www.cocoachina.com/bbs/read.php ...