[bzoj4908][BeiJing2017]开车
来自FallDream的博客,未经允许,请勿转载,谢谢。
#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
#define getchar() (*S++)
#define pa pair<int,int>
#define ll long long
#define MN 50000
#define MB 400
char B[<<],*S=B;
using namespace std;
inline int read()
{
int x = , f = ; char ch = getchar();
while(ch < '' || ch > ''){ if(ch == '-') f = -; ch = getchar();}
while(ch >= '' && ch <= ''){x = x * + ch - '';ch = getchar();}
return x * f;
}
long long Ans,ans[MB+],F[MB+][MB*+],f[MB+][MB*+];
int n,m,l[MN*+],cnt=,pos[MB+],a[MN+],block[MN*+],v[MN*+];
int s[MN*+],b[MN+],tot=,size;
struct ques{int x,y;}q[MN+];
inline int abs(int x){return x<?-x:x;}
void Move(int x,int y)
{
Ans-=ans[x];
if(abs(y)<=MB) Ans+=(ans[x]=F[x][MB+y]);
else
{
if(y>MB) Ans+=(ans[x]=F[x][MB<<]+1LL*(y-MB)*f[x][MB<<]);
if(y<MB) Ans+=(ans[x]=F[x][]+1LL*(MB-y)*f[x][]);
}
} void Build(int x)
{
int W=;
for(int i=;i<=MB<<;++i) f[x][i]=F[x][i]=;
for(int i=(x-)*size+;block[i]==x;++i)
{
F[x][MB]+=1LL*v[i]*abs(W+=s[i]);
if(!W) f[x][+MB]+=v[i],f[x][MB-]+=v[i];
if(W>) f[x][MB+]+=v[i],W<MB?(f[x][MB-W-]+=v[i]<<):,f[x][MB-]-=v[i];
if(W<) f[x][MB+]-=v[i],f[x][MB-W+]+=v[i]<<,f[x][MB-]+=v[i];
}
for(int i=;i<=MB;++i)
F[x][MB+i]=F[x][MB+i-]+(f[x][MB+i]+=f[x][MB+i-]),
F[x][MB-i]=F[x][MB-i+]+(f[x][MB-i]+=f[x][MB-i+]);
Move(x,pos[x]);
} int main()
{
fread(B,,<<,stdin);
n=read();
for(int i=;i<=n;++i) a[i]=l[++cnt]=read();
for(int i=;i<=n;++i) b[i]=l[++cnt]=read();
m=read();
for(int i=;i<=m;++i) q[i].x=read(),q[i].y=l[++cnt]=read();
sort(l+,l+cnt+);
for(int i=;i<=cnt;++i) if(l[i]!=l[i-]) l[++tot]=l[i];
for(int i=;i<tot;++i) v[i]=l[i+]-l[i];
size=sqrt(tot);
for(int i=;i<=n;++i)
a[i]=lower_bound(l+,l+tot+,a[i])-l,
b[i]=lower_bound(l+,l+tot+,b[i])-l,
++s[a[i]],--s[b[i]];
for(int i=;i<=tot;++i) block[i]=(i-)/size+;
for(int i=,w=;i<=block[tot];++i)
{
pos[i]=w;Build(i);
for(int j=(i-)*size+;block[j]==i;++j) w+=s[j];
}
printf("%lld\n",Ans);
for(int i=;i<=m;++i)
{
q[i].y=lower_bound(l+,l+tot+,q[i].y)-l;
if(q[i].y!=a[q[i].x])
{
--s[a[q[i].x]];++s[q[i].y];
if(block[q[i].y]==block[a[q[i].x]])
Build(block[q[i].y]);
else
{
int From=min(block[a[q[i].x]],block[q[i].y]),
To=max(block[a[q[i].x]],block[q[i].y]);
for(int j=From+;j<To;++j)
Move(j,pos[j]+=(q[i].y>a[q[i].x]?-:));
if(a[q[i].x]>q[i].y) ++pos[block[a[q[i].x]]];
else --pos[block[q[i].y]];
Build(block[q[i].y]);Build(block[a[q[i].x]]);
}
}
a[q[i].x]=q[i].y;printf("%lld\n",Ans);
}
return ;
}
[bzoj4908][BeiJing2017]开车的更多相关文章
- 【BZOJ4908】[BeiJing2017]开车 分块
[BZOJ4908][BeiJing2017]开车 Description 你有n辆车,分别a1, a2, ..., an位置和n个加油站,分别在b1, b2, ... ,bn .每个加油站只能支持一 ...
- [BZOJ]4908: [BeiJing2017]开车
Time Limit: 30 Sec Memory Limit: 256 MB Description 你有n辆车,分别a1, a2, ..., an位置和n个加油站,分别在b1, b2, ... ...
- vijos P1780 【NOIP2012】 开车旅行
描述 小\(A\)和小\(B\)决定利用假期外出旅行,他们将想去的城市从\(1\)到\(N\)编号,且编号较小的城市在编号较大的城市的西边,已知各个城市的海拔高度互不相同,记城市\(i\)的海拔高度为 ...
- [NOIP2012] 提高组 洛谷P1081 开车旅行
题目描述 小 A 和小 B 决定利用假期外出旅行,他们将想去的城市从 1 到 N 编号,且编号较小的 城市在编号较大的城市的西边,已知各个城市的海拔高度互不相同,记城市 i 的海拔高度为 Hi,城市 ...
- 豆制品厂开车超市送货智能手持PDA POS打票机-手持票据打印机
豆制品厂开车拉着豆腐到某一个超市送货,到达后秤出斤数后就用票据打印机开单 能直接开单,单子一式两份,一张给客户一张留底,到月底时客户要根据客户的量返点的,单子统计.能现场开单,单子上显示哪个超市,豆制 ...
- 在包a中编写一个类Father,具有属性:年龄(私有)、姓名(公有); 具有功能:工作(公有)、开车(公有)。 在包a中编写一个子类Son,具有属性:年龄(受保护的)、姓名; 具有功能:玩(私有)、学习(公有)。 最后在包b中编写主类Test,在主类的main方法中测试类Father与类Son。
package a; public class Father { public String name; private int age; public Father(String name) { t ...
- 【noip2012】开车旅行
题意: 给n个点的海拔h[i](不同点海拔不同) 两点的距离为abs(h[i]-h[j]) 有a.b两人轮流开车(只能往下标大的地方开) a每次会开到里当前点第二近的点 b每次会开到离当前点最近的点( ...
- 【NOIP 2012 开车旅行】***
题目描述 小 A 和小 B 决定利用假期外出旅行,他们将想去的城市从 1 到 N 编号,且编号较小的 城市在编号较大的城市的西边,已知各个城市的海拔高度互不相同,记城市 i 的海拔高度为 Hi,城市 ...
- javascript 老王开车去东北
[Decode error - output not utf-8] 魔女 飞 奔驰 去 华南 [Finished in 1.1s] 需要变化的对象进行隔离.正是编程的乐趣之处 /** * by Jac ...
随机推荐
- 服务器磁盘阵列数据恢复,raid5两块硬盘掉线数据恢复方法
[用户单位信息] 农业科学研究院某研究所 [磁盘阵列故障发生过程描述]客户的DELL MD1000服务器内置15块1TB硬盘搭建为RAID5磁盘阵列阵列,服务器在正常工作中有一块硬盘离线,管理员对磁盘 ...
- 【bug清除】Surface Pro系列使用Drawboard PDF出现手写偏移、卡顿、延迟现象的解决方式
最近自己新买的New Surface Pro在使用Drawboard PDF时,出现了性能问题,即笔迹延迟偏移,卡顿的问题. 排查驱动问题之后,确认解决方案如下: 将Surface的电池调到性能模式, ...
- win10 系统右键菜单不显示文字(只有小图标)修复方法
如下图,win10点击鼠标右键调出菜单时,看不到菜单的文字,只显示了小图标. 解决方法: Cortana 搜索 cmd ,看到 命令提示符,右键,选择 以管理员身份运行. 在命令提示符里输入以下命令, ...
- BizTalk Server 2010高可用方案
BizTalk Server 2010高可用方案 本文介绍了 Microsoft BizTalk Server 中通过对主机的各层进行扩展提供高可用性的方案. 分隔各个区域的功能分为不同的主机和中的层 ...
- EasyUI DataGrid - 嵌套的DataGrid
实现效果: 一.在页面头部引用视图脚本JS文件 <script src="@Url.Content("~/Resources/EasyUI/plugins/datagrid- ...
- 对JVM虚拟机中方法区的理解
因为jdk8的jvm已经取消了方法区,所以这边先主要介绍jdk8以下版本中方法区相关内容. 1.虚拟机规范中方法区的概念: 原文链接:http://docs.oracle.com/javase/spe ...
- Android智能手机上的音频浅析
手机可以说是现在人日常生活中最离不开的电子设备了.它自诞生以来,从模拟的发展到数字的,从1G发展到目前的4G以及不久将来的5G,从最初的只有唯一的功能(打电话)发展到目前的全功能,从功能机(featu ...
- Linux:nohub启动后台永久进程
nohup 命令运行由 Command参数和任何相关的 Arg参数指定的命令,忽略所有挂断(SIGHUP)信号.在注销后使用 nohup 命令运行后台中的程序.要运行后台中的 nohup 命令,添加 ...
- ZOJ-1203 Swordfish---最小生成树
题目链接: https://vjudge.net/problem/ZOJ-1203 题目大意: 给定平面上N个城市的位置,计算连接这N个城市所需线路长度总和的最小值. 思路: 模板题 最小生成树,Pr ...
- 从让 HTTPS 更安全出发,聊聊 HTTPS
随着公众对网络安全的日益关注,各种网络安全防护手段层出不穷.HTTPS Everywhere作为提升HTTPS安全性的有效手段,日前安全性与实用性再次得到了加强. HTTPS虽然可以有效提升用户浏览网 ...