看到这个式子当然先二分答案。得max-min-(j-i+k)ans>=0。

  显然max-min相同的情况下所选区间长度越短越好,所以max和min都应该取在边界。那么实际上我们根本不用管端点是否真的是max或min,因为即使不是将他们计入也不会对最终答案造成影响。不妨设右端点是max,则要最大化aj-ai-(j-i)ans=(aj-jans)-(ai-ians),单调队列维护即可。左端点是max同理。

  为了防止不存在长度在l~r的这样的区间,先对长度l的区间单调队列暴力跑一次。

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
using namespace std;
int read()
{
int x=,f=;char c=getchar();
while (c<''||c>'') {if (c=='-') f=-;c=getchar();}
while (c>=''&&c<='') x=(x<<)+(x<<)+(c^),c=getchar();
return x*f;
}
#define N 50010
const double eps=1E-;
int T,n,k,l,r,a[N],p[N],q[N];
bool check(double ans)
{
int head=,tail=,head1=,tail1=;
for (int i=;i<=n;i++)
{
while (head<=tail&&p[head]<=i-l) head++;
while (head<=tail&&a[i]>=a[p[tail]]) tail--;
p[++tail]=i;
while (head1<=tail1&&q[head1]<=i-l) head1++;
while (head1<=tail1&&a[i]<=a[q[tail1]]) tail1--;
q[++tail1]=i;
if (i>=l&&a[p[head]]-a[q[head1]]>=(l+k-)*ans) return ;
}
head=,tail=;
for (int i=;i<=n;i++)
{
while (head<=tail&&q[head]<=i-r) head++;
if (i>=l)
{
while (head<=tail&&a[q[tail]]-q[tail]*ans>=a[i-l+]-(i-l+)*ans) tail--;
q[++tail]=i-l+;
if ((a[i]-i*ans)-(a[q[head]]-q[head]*ans)>=k*ans) return ;
}
}
head=,tail=;
for (int i=;i<=n;i++)
{
while (head<=tail&&q[head]<=i-r) head++;
if (i>=l)
{
while (head<=tail&&a[q[tail]]+q[tail]*ans<=a[i-l+]+(i-l+)*ans) tail--;
q[++tail]=i-l+;
if ((a[q[head]]+q[head]*ans)-(a[i]+i*ans)>=k*ans) return ;
}
}
return ;
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("bzoj4476.in","r",stdin);
freopen("bzoj4476.out","w",stdout);
const char LL[]="%I64d\n";
#else
const char LL[]="%lld\n";
#endif
T=read();
while (T--)
{
n=read(),k=read(),l=read(),r=read();
for (int i=;i<=n;i++) a[i]=read();
double L=,R=,ans;
while (L+eps<=R)
{
double mid=(L+R)/;
if (check(mid)) ans=mid,L=mid+eps;
else R=mid-eps;
}
printf("%.4f\n",ans);
}
return ;
}

BZOJ4476 JSOI2015送礼物(分数规划+单调队列)的更多相关文章

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

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

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

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

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

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

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

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

  5. [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) ...

  6. BZOJ 5281--[Usaco2018 Open]Talent Show(分数规划&单调队列&DP)

    5281: [Usaco2018 Open]Talent Show Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 79  Solved: 58[Sub ...

  7. bzoj4476 [Jsoi2015]送礼物

    化简式子 $M>=m+ans*(r-l+k)$ 发现$M,m$确定时,总区间长度越小越好,于是假定右端点为最小值$M+ans*l>=m+ans*r+ans*k$, 右面都确定了,但最大值仍 ...

  8. 【BZOJ3316】JC loves Mkk 分数规划+单调队列

    [BZOJ3316]JC loves Mkk Description Input 第1行,包含三个整数.n,L,R.第2行n个数,代表a[1..n]. Output 仅1行,表示询问答案.如果答案是整 ...

  9. 【BZOJ 3316】JC loves Mkk 01分数规划+单调队列

    单调栈不断吞入数据维护最值,数据具有单调性但不保证位置为其排名,同时可以按照进入顺序找出临近较值单调队列队列两端均可删除数据但只有队末可以加入数据,仍然不断吞入数据但同时可以额外刨除一些不符合条件的数 ...

随机推荐

  1. Spring Boot2.0拦截器简单实现判断是否登录

    在进行项目开发的时候使用springboot框架用到拦截器时发现2.0以后原来的抽象类WebMvcConfigurerAdapter已经过时了,去官网查文档2.x版本要实现拦截器功能改为需要继承Web ...

  2. Co. - Microsoft - Windows - Dos命令

    DOS命令 cd .. 是进入上一层目录,cd \ 是进入根目录 我们来重申下%~dp0和%cd%的区别, %cd%和%~dp0都能用来表示当前目录,但是他们在不同的使用场景下,功能却不相同: %cd ...

  3. Laravel POST请求API接口 使用validate表单验证返回欢迎页

    突然遇到的问题  就是使用Laravel进行开发API接口的时候  发现在表单验证不通过的时候返回了登录页 猜测问题应该是因为表单验证失败后进行了重定向导致的 因为返回状态码200 网上找了好久没找到 ...

  4. Qt——菜单栏、工具栏、状态栏

    1.菜单栏 菜单栏的意义是将可点击触发最终事件的集中在一起,所以菜单栏中是QAction 添加菜单栏是QMainWindow的行为 QMenubar *menubar = this->addMe ...

  5. 怎么实现hibernate悲观锁和乐观锁?

    隔离级别的安全控制是整体一个大的方面,而锁机制更加的灵活,它执行的粒度可以很小,可以在一个事务中存在. Hibernate悲观锁是依靠底层数据库的锁机制实现,在查询query.setLockMode( ...

  6. windows 系统禁止使用 U 盘的方法

    windows 系统禁止使用 U 盘的方法 最简单的办法: 注册表 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentCntrolSet\Services\USBSTOR] 将名为 ...

  7. spring读取properties和其他配置文件的几种方式

    1.因为spring容器的一些机制,在读取配置文件进行数据库的配置等等是很有必要的,所以我们要考虑配置文件的的读取方式以及各个方式的实用性 2.配置文件的读取方式我这里介绍2种,目的是掌握这2种就可以 ...

  8. Linux 服务器 监控命令

    1 top top类似于windows下面的资源管理器.不仅能够从服务器整体上展示服务器的大致情况,还可以看到具体进程 耗费资源的情况. 展示内存.cpu.交换分区等信息 如上图: 第一行主要描述系统 ...

  9. 『AngularJS』理解$Scope

    理解$Scope 执行概要 在AngularJS,一个子scope通常原型继承于它的父scope.应用于这个规则的表达式是一个使用scope:{...}的指令,这将创建一个『孤岛』scope(非原型继 ...

  10. 使用polarssl进行RSA加密解密

    RSA算法的原理就不提了,网上有很多介绍的文章,因为项目中使用RSA加密,所以需要找一个RSA加密的算法,之前尝试过使用Crypto++库,无奈Crypto++其中使用了大量的模版,各种继承,看着头大 ...