【BZOJ4476&JSOI2015】送礼物(二分,RMQ)

ANS明显是有二分性的
二分答案,设二分值为b
M(i,j)−m(i,j)j−i+k>b
显然当l<长度<r时,一端是最小值,一端是最大值。
等于l或r的时候因为可能不满足以上性质,所以RMQ暴力O(nlogn)做。
a[i]−a[j]>b∗j−b∗i+b∗k 或 a[j]−a[i]>b∗j−b∗i+b∗k
那么
(a[i]+b∗i)−(a[j]+b∗j)>b∗k 或 (−a[i]+b∗i)−(−a[j]+b∗j)>b∗k
是一个单调队列的样子
var f1,f2:array[..,..]of extended;
q:array[..]of longint;
a,e:array[..]of extended;
mi:array[..]of int64;
log:array[..]of longint;
cas,i,v,j:longint;
n,l1,r1,lg:int64;
l,r,mid,k:extended; function max(x,y:extended):extended;
begin
if x>y then exit(x);
exit(y);
end; function min(x,y:extended):extended;
begin
if x<y then exit(x);
exit(y);
end; function querymin(x,y:longint):extended;
var len:longint;
begin
len:=log[y-x+];
exit(min(f1[x,len],f1[y-mi[len]+,len]));
end; function querymax(x,y:longint):extended;
var len:longint;
begin
len:=log[y-x+];
exit(max(f2[x,len],f2[y-mi[len]+,len]));
end; procedure build1;
var i,j:longint;
begin
for i:= to lg do
for j:= to n-mi[i]+ do f1[j,i]:=min(f1[j,i-],f1[j+mi[i-],i-]);
end; procedure build2;
var i,j:longint;
begin
for i:= to lg do
for j:= to n-mi[i]+ do f2[j,i]:=max(f2[j,i-],f2[j+mi[i-],i-]);
end; function isok(b:extended):boolean;
var h,w,i:longint;
begin
for i:= to n do e[i]:=a[i]+b*i;
h:=; w:=;
q[]:=n;
for i:=n-l1+ downto do
begin
while (h<=w)and(q[h]>i+r1-) do inc(h);
if e[i]-e[q[h]]>=b*k then exit(true);
while (h<=w)and(e[q[w]]>=e[i+l1-]) do dec(w);
inc(w); q[w]:=i+l1-;
end;
for i:= to n do e[i]:=-a[i]+b*i;
h:=; w:=;
q[]:=n;
for i:=n-l1+ downto do
begin
while (h<=w)and(q[h]>i+r1-) do inc(h);
if e[i]-e[q[h]]>=b*k then exit(true);
while (h<=w)and(e[q[w]]>=e[i+l1-]) do dec(w);
inc(w); q[w]:=i+l1-;
end;
exit(false);
end; begin
assign(input,'gift.in'); reset(input);
assign(output,'gift.out'); rewrite(output);
readln(cas);
mi[]:=;
for i:= to do mi[i]:=mi[i-]*;
for i:= to do
for j:=mi[i] to mi[i+]- do log[j]:=i;
for v:= to cas do
begin
readln(n,k,l1,r1);
for i:= to n do read(a[i]);
l:=; r:=;
for i:= to n do
begin
f1[i,]:=a[i];
f2[i,]:=a[i];
end;
lg:=log[r1];
build1; build2;
for i:= to n-l1+ do l:=max(l,(querymax(i,i+l1-)-querymin(i,i+l1-))/(l1-+k));
for i:= to n-r1+ do l:=max(l,(querymax(i,i+r1-)-querymin(i,i+r1-))/(r1-+k));
l1:=l1+; r1:=r1-;
if l1<=r1 then
while r-l>1e-6 do
begin
mid:=(r+l)/;
if isok(mid) then l:=mid
else r:=mid;
end;
writeln(l::);
end;
close(input);
close(output);
end.
【BZOJ4476&JSOI2015】送礼物(二分,RMQ)的更多相关文章
- [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) ...
- luogu P6087 [JSOI2015]送礼物 二分 单调队列 决策单调性
LINK:送礼物 原本想了一个 \(nlog^2\)的做法 然后由于线段树常数过大 T到30. 以为这道题卡\(log^2\)没想到真的有神仙写\(log^2\)的过了 是我常数大了 抱歉. 能过的\ ...
- bzoj4476 [Jsoi2015]送礼物
化简式子 $M>=m+ans*(r-l+k)$ 发现$M,m$确定时,总区间长度越小越好,于是假定右端点为最小值$M+ans*l>=m+ans*r+ans*k$, 右面都确定了,但最大值仍 ...
- BZOJ4476 JSOI2015送礼物(分数规划+单调队列)
看到这个式子当然先二分答案.得max-min-(j-i+k)ans>=0. 显然max-min相同的情况下所选区间长度越短越好,所以max和min都应该取在边界.那么实际上我们根本不用管端点是否 ...
- [BZOJ4476][JSOI2015]送礼物[分数规划+单调队列]
题意 题目链接 分析 分数规划之后可以得到式子:\(max-min-r*mid+l*mid\geq k*mid\) . 贪心选择,肯定区间的端点是极小或者极大值.特殊处理区间长度 \(\leq L\) ...
- 【BZOJ4476】[Jsoi2015]送礼物 分数规划+RMQ
[BZOJ4476][Jsoi2015]送礼物 Description JYY和CX的结婚纪念日即将到来,JYY来到萌萌开的礼品店选购纪念礼物.萌萌的礼品店很神奇,所有出售的礼物都按照特定的顺序都排成 ...
- BZOJ_4476_[Jsoi2015]送礼物_01分数规划+单调队列
BZOJ_4476_[Jsoi2015]送礼物_01分数规划+单调队列 Description JYY和CX的结婚纪念日即将到来,JYY来到萌萌开的礼品店选购纪念礼物. 萌萌的礼品店很神奇,所有出售的 ...
- P6087 [JSOI2015]送礼物 01分数规划+单调队列+ST表
P6087 [JSOI2015]送礼物 01分数规划+单调队列+ST表 题目背景 \(JYY\) 和 \(CX\) 的结婚纪念日即将到来,\(JYY\) 来到萌萌开的礼品店选购纪念礼物. 萌萌的礼品店 ...
- 送礼物(二分加双向DFS)
题目链接 题意:给你n个礼物重量,给你一个M力量,看你一次性搬动不超过M的礼物重量. 思路:看似背包,但M太大.所以要用DFS,但n也有45,所以考虑双向DFS先搜前半部分满足情况的所有重量,然后去重 ...
- JSOI 2015 送礼物
[BZOJ4476] [JSOI2015]送礼物 Description JYY和CX的结婚纪念日即将到来,JYY来到萌萌开的礼品店选购纪念礼物. 萌萌的礼品店很神奇,所有出售的礼物都按照特定的顺序都 ...
随机推荐
- 多种语言书写 “ HelloWorld ”
最基本的C: #include<stdio.h> int main(int argc, char const *argv[]) { printf("HelloWorld\n&qu ...
- 用随机森林分类器和GBDT进行特征筛选
一.决策树(类型.节点特征选择的算法原理.优缺点.随机森林算法产生的背景) 1.分类树和回归树 由目标变量是离散的还是连续的来决定的:目标变量是离散的,选择分类树:反之(目标变量是连续的,但自变量可以 ...
- Django2.1集成xadmin管理后台所遇到的错误集锦,解决填坑
django默认是有一个admin的后台管理模块,但是丑,功能也不齐全,但是大神给我们已经集成好了xadmin后台,我们拿来用即可,但是呢,django已经升级到2.1版本了,xadmin貌似跟不上节 ...
- python3 练习题100例 (七)
题目七:将一个列表的数据复制到另一个列表中. #!/usr/bin/env python3 # -*- coding: utf-8 -*- """ 题目七:将一个列表的数 ...
- Ubuntu强制卸载VMware-player
有时候安装了vmwar-player,想再安装vmware-workstation,却提示一些古怪的消息(现在忘记具体是什么了).只能先卸载再安装 首先你可以尝试常规卸载: sudo vmware-i ...
- hihocoder1015 kmp算法
#1015 : KMP算法 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho是一对好朋友,出生在信息化社会的他们对编程产生了莫大的兴趣,他们约定好互相帮助,在 ...
- 二分法:CF371C-Hamburgers(二分法+字符串的处理)
Hamburgers Time Limit:1000MS Memory Limit:262144KB 64bit IO Format:%I64d & %I64u Desc ...
- jni 调用
Event 0 on null Unexpected event 0 on /storage/emulated/0/Books/null
- day18 js 正则,UI框架,Django helloworld 以及完整工作流程
JS正则: text 判断字符串是否符合规定的正则表达式 exec 获取匹配的数据 默认情况下: 只要能匹配到就返回true 否则返回false 只匹配数字: 所以J ...
- Python框架之Django学习笔记(十)
又是一周周末,如约学习Django框架.在上一次,介绍了MVC开发模式以及Django自己的MVT开发模式,此次,就从数据处理层Model谈起. 数据库配置 首先,我们需要做些初始配置:我们需要告诉D ...