【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来到萌萌开的礼品店选购纪念礼物. 萌萌的礼品店很神奇,所有出售的礼物都按照特定的顺序都 ...
随机推荐
- bat 服务启动脚本
当电脑上有多个数据库(特别是Oracle,占用内存大,所以我都是设置为手动启动的,或者想在电脑上运行一下其他UI类软件或玩些游戏的时候也需要暂时关掉,奈何我这渣机(V_V))需要启动或停止的时候,就用 ...
- Java 获取Web项目相对webapp地址
例如, import java.io.File; import java.io.FileInputStream; import javax.servlet.http.HttpServletReques ...
- JZ2440开发板与ubuntu互ping,然后进行文件的共享和挂载
操作手册如下:但本人直接用网线直接连通开发板的网口与电脑的网口没有成功过.采用路由器可以直接ping通,具体操作如下: 首先用网线将开发板和路由器连接.电脑无论是用wifi还是网线均可.然后关闭Win ...
- vue 组件的书写
简单的来说是 vue组件最核心的就是props和自定义函数,来实现组件的开发 最简单的一个组件 子组件如下: <template> <div class="bgClass& ...
- 【CSS】css控制模块到顶层或底层
举例子,分别有div1和div2现要把div1控制在div2的顶层,可以这样做: } div.div2{} 两个要点:一.设置div的position为absolute,即绝对定位.二.z-index ...
- C++实例 MySTLString
#include <iostream> #include <cstring> #include <string> using namespace std; clas ...
- POJ 2586 贪心+枚举
Y2K Accounting Bug Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 15626 Accepted: 78 ...
- Java面向对象---面向对象
程序的发展历程:面向过程-->面向对象 面向过程:不去想怎么做,边做边看 面向对象:先想好怎么做,然后再做 修饰符(访问权限) 访问级别 访问控制修饰符 同类 同包 子类 不同的包 公开 pub ...
- 获取获取docker的文件
1.docke实例内mysql 导出文件 mysql -h yourhost -P yourport -u user -p dbname -e "select * from employee ...
- LoadRunner11的安装和使用及其注意点(测试系统是win7)
一.安装 LoadRunner11的下载地址:http://www.ddooo.com/softdown/61971.htm 链接标题里[loadrunner11 中文破解版]实质上下载下来是没有破解 ...