[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 ...
随机推荐
- 申请JetBrains学生免费注册码
1.申请.edu.*后缀的邮箱 从某个知乎用户上面得到了两个可以申请的后缀edu的邮箱 上海交通大学校友统一身份认证:https://register.alumni.sjtu.edu.cn/alumn ...
- JAVA_SE基础——48.多态
面向对象程序设计的三个特点是封装.继承和多态.前面已经学习了前两个特点.本章节将介绍多态性. 多态:一个对象具备多种形态.(父类的引用类型变量指向了子类的对象)或者是接口 的引用类型变量指向了接口实现 ...
- 逆向集录_00_不同程序OEP特征总结
在分析/逆向 程序时,如果事先知道这类程序的一些特征,那将会是事半功倍的: 分析/逆向 程序,和写程序不同,比喻的话:写程序像在作案,分析/逆向 程序就像是在破案,对破案来讲,重在假想和推理: 特征1 ...
- thinkphp后台向前台传值没有传过去的小问题
if($listyyarr){ $this->assign('listyyarr',$listyyarr); //$this->assign('nowDated',$endDated); ...
- LeetCode & Q189-Rotate Array-Easy
Array Description: Rotate an array of n elements to the right by k steps. For example, with n = 7 an ...
- 剑指offer-两个链表的第一个公共节点
题目描述 输入两个链表,找出它们的第一个公共结点. 解题思路 分析可得如果两个链表有公共节点,那么公共节点出现在两个链表的尾部,即从某一节点开始,两链表之后的节点全部相等.可以首先遍历两个链表得出各自 ...
- vueJs 源码解析 (三) 具体代码
vueJs 源码解析 (三) 具体代码 在之前的文章中提到了 vuejs 源码中的 架构部分,以及 谈论到了 vue 源码三要素 vm.compiler.watcher 这三要素,那么今天我们就从这三 ...
- YML(1)什么是 YML
YAML(IPA: /ˈjæməl/,尾音类似camel骆驼) YAML 是一个可读性高,用来表达资料序列的编程语言. YAML参考了其他多种语言,包括:XML.C语言.Python.Perl以及电子 ...
- python/socket编程之粘包
python/socket编程之粘包 粘包 只有TCP有粘包现象,UDP永远不会粘包. 首先需要掌握一个socket收发消息的原理 发送端可以是1k,1k的发送数据而接受端的应用程序可以2k,2k的提 ...
- Django:(博客系统)添加文章(中文)出现UnicodeEncodeError乱码
添加文章时出现了一个UnicodeEncodeError乱码问题 在添加文章时,抛出了异常: 解决方案,修改manage.py(添加import sys reload(sys) sys.setdefa ...