http://uoj.ac/problem/49

这题二分答案可以做,同时存在另一个直接二分的解法。

考虑对每个点,二分能向左右延伸的最大半径,由于权值范围较大,不能O(1)查询向一侧走指定距离后到达的位置,又由于单调性,可以同时二分左右延伸的长度,如果可行考虑延长较短的一侧,否则缩短较长的一侧。

#include<cstdio>
typedef long long i64;
const int N=;
char buf[N*],*ptr=buf-;
template<class T>
T R(){
T x=;
while(*ptr<)++ptr;
while(*ptr>)x=x*+*ptr++-;
return x;
}
int n,xs[N],as[N];
i64 t,s[N][];
i64 cal(int l,int m,int r){
return
(s[r][]-s[m][])-(s[r][]-s[m][])*xs[m]-
(s[m][]-s[l-][])+(s[m][]-s[l-][])*xs[m];
}
i64 min(i64 a,i64 b){return a<b?a:b;}
int main(){
fread(buf,,sizeof(buf),stdin);
n=R<int>();
t=R<i64>()/;
for(int i=;i<=n;++i)xs[i]=R<int>();
for(int i=;i<=n;++i)as[i]=R<int>();
for(int i=;i<=n;++i){
s[i][]=s[i-][]+as[i];
s[i][]=s[i-][]+i64(as[i])*xs[i];
}
i64 ans=;
for(int i=;i<=n;++i){
int L1=,R1=i,L2=i,R2=n,M1,M2;
i64 v,cs;
while(L1<R1&&L2<R2){
M1=L1+R1>>;
M2=L2+R2+>>;
v=cal(M1,i,M2);
if(xs[i]-xs[M1]<xs[M2]-xs[i])v<=t?R1=M1:R2=M2-;
else v<=t?L2=M2:L1=M1+;
}
while(L1<R1){
M1=L1+R1>>;
v=cal(M1,i,L2);
v<=t?R1=M1:L1=M1+;
}
while(L2<R2){
M2=L2+R2+>>;
v=cal(L1,i,M2);
v<=t?L2=M2:R2=M2-;
}
v=t-cal(L1,i,L2);
cs=s[L2][]-s[L1-][];
if(L1>&&(L2==n||xs[i]-xs[L1-]<xs[L2+]-xs[i]))cs+=min(as[L1-],v/(xs[i]-xs[L1-]));
else if(L2<n)cs+=min(as[L2+],v/(xs[L2+]-xs[i]));
if(cs>ans)ans=cs;
}
printf("%lld\n",ans);
return ;
}

uoj #49. 【UR #3】铀仓库的更多相关文章

  1. 【UOJ#49】【UR #3】轴仓库

    [UOJ#49][UR #3]轴仓库 题面 UOJ 题解 不难发现一定是每次找到离当前位置最近的一个箱子,然后把它搬过来. 那么如果我们能够确定起始位置,我们就可以二分从两侧多少距离搬箱子,判断一下时 ...

  2. 【UOJ】#49.铀仓库

    题解: 会发现实质上运一个点就是两个点之间的距离 暴力是n^2的 考虑二分距离来计算 二分完之后还要二分这个点对应的位置 nlognlogn的 考虑一种常用的思路 用一个点来更新另一个点 首先我们先二 ...

  3. UOJ 【UR #5】怎样跑得更快

    [UOJ#62]怎样跑得更快 题面 这个题让人有高斯消元的冲动,但肯定是不行的. 这个题算是莫比乌斯反演的一个非常巧妙的应用(不看题解不会做). 套路1: 因为\(b(i)\)能表达成一系列\(x(i ...

  4. UOJ #22 UR #1 外星人

    LINK:#22. UR #1 外星人 给出n个正整数数 一个初值x x要逐个对这些数字取模 问怎样排列使得最终结果最大 使结果最大的方案数又多少种? n<=1000,x<=5000. 考 ...

  5. UOJ.52.[UR #4]元旦激光炮(交互 思路)

    题目链接 \(Description\) 交互库中有三个排好序的,长度分别为\(n_a,n_b,n_c\)的数组\(a,b,c\).你需要求出所有元素中第\(k\)小的数.你可以调用至多\(100\) ...

  6. UOJ【UR #12】实验室外的攻防战

    题意: 给出一个排列$A$,问是否能够经过以下若干次变换变为排列$B$ 变换:若${A_i> A_i+1}$,可以${swap(A_i,A_i+1)}$ 考虑一个数字从A排列到B排列连出来的路径 ...

  7. 【UOJ Round #3】

    枚举/二分 C题太神窝看不懂…… 核聚变反应强度 QwQ很容易发现次小的公约数一定是gcd的一个约数,然后……我就傻逼地去每次算出a[1],a[i]的gcd,然后枚举约数……这复杂度……哦呵呵... ...

  8. 部署docker-registry私有仓库

    部署docker-registry私有仓库 创建文件夹 sudo mkdir -p /var/docker-data/{registry,certs,auth} ​ sudo openssl req ...

  9. 【UOJ#242】【UR#16】破坏蛋糕(计算几何)

    [UOJ#242][UR#16]破坏蛋糕(计算几何) 题面 UOJ 题解 为了方便,我们假定最后一条直线是从上往下穿过来的,比如说把它当成坐标系的\(y\)轴. 于是我们可以处理出所有交点,然后把它们 ...

随机推荐

  1. CodeForces - 1100F:Ivan and Burgers (线性基&贪心)(离线 在线)

    题意:给定N个数,Q次询问,求区间最大异或和. 思路:一开始想的线性基+线段树.单次线性基合并的复杂度为20*20,结合线段树,复杂度为O(NlogN*20*20):显然,超时. 超时代码: #inc ...

  2. 将mysql的表导出为excel

     1.在表上右键,选择Table Data Export Wizard,选择想要导出的字段,点击next 2.选择导出文件的路径->csv格式->next 3.点击next 4.打开刚才导 ...

  3. C语言--第四周作业评分和总结(5班)

    作业链接:https://edu.cnblogs.com/campus/hljkj/CS2017-5/homework/1129 一.评分要求 要求1 完成PTA第四周所有题(20分). 要求2 4道 ...

  4. 启动服务报错:nested exception is java.lang.NoSuchMethodError: org.apache.cxf.common.jaxb.JAXBUtils.closeUnmarshaller(Ljavax/xml/bind/Unmarshaller;)V

    1.启动tomcat时报错:Error creating bean with name 'payInfService': Invocation of init method failed; neste ...

  5. html css input定位 文本框阴影 灰色不可编辑

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. python——psutil的使用(获取进程信息)

    import psutil psutil.pids() [1, 2, 3, 7, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 26, 27, 28, 2 ...

  7. VS 中的几种注释方法

    在代码的后面添加形如下面注释: //TODO: (未实现)…… //UNDONE:(没有做完)…… //HACK:(修改)…… 等到再次打开VS的时候,找到 :视图>任务列表 即可显示所有带有T ...

  8. 清空库数据sql

    --清空库数据CREATE PROCEDURE sp_DeleteAllData AS EXEC sp_MSForEachTable 'ALTER TABLE ? NOCHECK CONSTRAINT ...

  9. dojo:如何用MultiSelect实现类似ListBox风格的FromTo功能

    欲实现的功能如下图: 主要要解决的问题包括两个方面: 一个是MultiSelet初始化的工作,一个是FromTo功能按钮的实现.这主要是因为MultiSelect控件是存储无关的,并不像Select或 ...

  10. Idea 无法显示mybatis-generator插件

    Idea在pom.xml中添加了mybatis-generator插件后,右侧的maven projects中并未显示这个插件? 解决方法: 新建一个plugins标签和pluginManager同级 ...