uoj #49. 【UR #3】铀仓库
这题二分答案可以做,同时存在另一个直接二分的解法。
考虑对每个点,二分能向左右延伸的最大半径,由于权值范围较大,不能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】铀仓库的更多相关文章
- 【UOJ#49】【UR #3】轴仓库
[UOJ#49][UR #3]轴仓库 题面 UOJ 题解 不难发现一定是每次找到离当前位置最近的一个箱子,然后把它搬过来. 那么如果我们能够确定起始位置,我们就可以二分从两侧多少距离搬箱子,判断一下时 ...
- 【UOJ】#49.铀仓库
题解: 会发现实质上运一个点就是两个点之间的距离 暴力是n^2的 考虑二分距离来计算 二分完之后还要二分这个点对应的位置 nlognlogn的 考虑一种常用的思路 用一个点来更新另一个点 首先我们先二 ...
- UOJ 【UR #5】怎样跑得更快
[UOJ#62]怎样跑得更快 题面 这个题让人有高斯消元的冲动,但肯定是不行的. 这个题算是莫比乌斯反演的一个非常巧妙的应用(不看题解不会做). 套路1: 因为\(b(i)\)能表达成一系列\(x(i ...
- UOJ #22 UR #1 外星人
LINK:#22. UR #1 外星人 给出n个正整数数 一个初值x x要逐个对这些数字取模 问怎样排列使得最终结果最大 使结果最大的方案数又多少种? n<=1000,x<=5000. 考 ...
- UOJ.52.[UR #4]元旦激光炮(交互 思路)
题目链接 \(Description\) 交互库中有三个排好序的,长度分别为\(n_a,n_b,n_c\)的数组\(a,b,c\).你需要求出所有元素中第\(k\)小的数.你可以调用至多\(100\) ...
- UOJ【UR #12】实验室外的攻防战
题意: 给出一个排列$A$,问是否能够经过以下若干次变换变为排列$B$ 变换:若${A_i> A_i+1}$,可以${swap(A_i,A_i+1)}$ 考虑一个数字从A排列到B排列连出来的路径 ...
- 【UOJ Round #3】
枚举/二分 C题太神窝看不懂…… 核聚变反应强度 QwQ很容易发现次小的公约数一定是gcd的一个约数,然后……我就傻逼地去每次算出a[1],a[i]的gcd,然后枚举约数……这复杂度……哦呵呵... ...
- 部署docker-registry私有仓库
部署docker-registry私有仓库 创建文件夹 sudo mkdir -p /var/docker-data/{registry,certs,auth} sudo openssl req ...
- 【UOJ#242】【UR#16】破坏蛋糕(计算几何)
[UOJ#242][UR#16]破坏蛋糕(计算几何) 题面 UOJ 题解 为了方便,我们假定最后一条直线是从上往下穿过来的,比如说把它当成坐标系的\(y\)轴. 于是我们可以处理出所有交点,然后把它们 ...
随机推荐
- python函数完整语法和分类
函数初级 简介 # 函数是一系列代码的集合,用来完成某项特定的功能 优点 '''1. 避免代码的冗余2. 让程序代码结构更加清晰3. 让代码具有复用性,便于维护''' 函数四部分 '''1. 函数名: ...
- Tomcat介绍、安装jdk、安装Tomcat、配置Tomcat监听80端口
1.Tomcat介绍 2.安装jdk下载:wget -c http://download.oracle.com/otn-pub/java/jdk/10.0.1+10/fb4372174a714e6b8 ...
- php基础-4
require和include require和include都是导入外部php文件的方法,使用方法为require和include关键字后接导入包(php_file)的名字的字符串形式. 当导入的包 ...
- Go Example--关闭通道
package main import ( "fmt" ) func main() { jobs := make(chan int, 5) done := make(chan bo ...
- go build Multiple main.go file
golang 如何编译同目录下多个main文件? 多个go 文件在相同目录编译时候会报错, 可将文件放在不同的package下,结构如下: buidtest/├── a│ └── a.go└── ...
- apache常用配置文件讲解
apache 的httpd.conf常用配置说明 # ServerRoot: The top of the directory tree under which the server's # conf ...
- 微软Azure通知中心 (Azure Notification Hubs)
Azure Notification Hubs 提供简单的方法从后台(azure或者on-promise)去发送通知在不同的平台上面(iOS, Android, Windows, Kindle, Ba ...
- Revit 开发将自己的窗口设置为Revit窗口
在Revit开发中如果使用modeless的对话框,经常容易被Revit窗体覆盖,但是如果将窗体设为Topmost的话,当Revit失去焦点后,它又会遮住其他程序的界面,比如将Revit最小化后,To ...
- e生保plus
e生保plus https://m.health.pingan.com/share/products/esb_plus.html?re_from=qdlmMSDbxtj&order_from= ...
- splitChunks. cacheGroups 里面的 maxInitialRequests 含义
entry文件请求的chunks不应该超过此值(请求过多,耗时) 出处:https://ymbo.github.io/2018/05/21/webpack%E9%85%8D%E7%BD%AE%E4%B ...