[BJOI2017]开车

直接做要用栈

修改?难以直接维护

统计边的贡献!

len*abs(pre)pre表示前缀car-stop

修改时候,整个区间的pre+1或者-1

分块,块内对pre排序并打标记

二分出0的位置,再根据pre的正负和本次是+1,-1,leni贡献+1还是-1的贡献

O(nsqrt(n)logn)

#include<bits/stdc++.h>
#define reg register int
#define il inline
#define fi first
#define se second
#define mk(a,b) make_pair(a,b)
#define numb (ch^'0')
using namespace std;
typedef long long ll;
template<class T>il void rd(T &x){char ch;x=0;bool fl=false;while(!isdigit(ch=getchar()))(ch=='-')&&(fl=true);for(x=numb;isdigit(ch=getchar());x=x*10+numb);(fl==true)&&(x=-x);
}
template<class T>il void output(T x){if(x/10)output(x/10);putchar(x%10+'0');}
template<class T>il void ot(T x){if(x<0) putchar('-'),x=-x;output(x);putchar(' ');}
template<class T>il void prt(T a[],int st,int nd){for(reg i=st;i<=nd;++i) ot(a[i]);putchar('\n');}namespace Miracle{
const int N=3*5e4+5;
const int B=450;
int n,m;
int L[N],R[N];
struct qs{int id,x;
}q[N];
int c[N],cnt;
int tot;
int pos[N],b[N];
int be[N],len[N];vector<int>mem[B],sum[B];
int tag[B];
ll con[B];int exi[N];//0: none 1:car -1:stop
int pre[N];
int buc[N];
bool cmp(int x,int y){return pre[x]<pre[y];
}
int li(int x){return lower_bound(c+1,c+cnt+1,x)-c;
}
int main(){rd(n);for(reg i=1;i<=n;++i) rd(pos[i]),c[++cnt]=pos[i];for(reg i=1;i<=n;++i) rd(b[i]),c[++cnt]=b[i];rd(m);for(reg i=1;i<=m;++i){rd(q[i].id);rd(q[i].x);c[++cnt]=q[i].x;}sort(c+1,c+cnt+1);cnt=unique(c+1,c+cnt+1)-c-1;int blo=sqrt(cnt)+1;for(reg i=1;i<=cnt;++i){be[i]=(i-1)/blo+1;if(!L[be[i]]) L[be[i]]=i;R[be[i]]=i;len[i]=c[i+1]-c[i];}len[cnt]=0;tot=be[cnt];for(reg i=1;i<=n;++i){int po=lower_bound(c+1,c+cnt+1,b[i])-c;--exi[po];po=lower_bound(c+1,c+cnt+1,pos[i])-c;++exi[po];}ll ans=0;for(reg i=1;i<=cnt;++i){pre[i]=pre[i-1]+exi[i];ans+=(ll)len[i]*abs(pre[i]);}for(reg j=1;j<=tot;++j){tag[j]=0;for(reg i=L[j];i<=R[j];++i){mem[j].push_back(i);con[j]+=(ll)len[i]*abs(pre[i]);}sort(mem[j].begin(),mem[j].end(),cmp);sum[j].resize(mem[j].size());for(reg i=0;i<(int)mem[j].size();++i){sum[j][i]=len[mem[j][i]];if(i) sum[j][i]+=sum[j][i-1];}}printf("%lld\n",ans);for(reg o=1;o<=m;++o){int l=li(pos[q[o].id]),r=li(q[o].x);exi[l]--;exi[r]++;int c=-1;//l->rif(l>r) swap(l,r),c=1;//r->l--r;//warinig!!!if(be[l]==be[r]){        for(reg i=l;i<=r;++i) pre[i]+=c;ans-=con[be[l]];con[be[l]]=0;mem[be[l]].clear();sum[be[l]].clear();int j=be[l];for(reg i=L[be[l]];i<=R[be[l]];++i){pre[i]+=tag[be[l]];mem[j].push_back(i);}sort(mem[j].begin(),mem[j].end(),cmp);sum[j].resize(mem[j].size());for(reg i=0;i<(int)mem[j].size();++i){sum[j][i]=len[mem[j][i]];con[j]+=(ll)len[mem[j][i]]*abs(pre[mem[j][i]]);if(i) sum[j][i]+=sum[j][i-1];}tag[be[l]]=0;ans+=con[be[l]];}else{for(reg i=l;i<=R[be[l]];++i){pre[i]+=c;}int j=be[l];ans-=con[j];con[j]=0;mem[j].clear();sum[j].clear();for(reg i=L[j];i<=R[j];++i){pre[i]+=tag[j];mem[j].push_back(i);}sort(mem[j].begin(),mem[j].end(),cmp);sum[j].resize(mem[j].size());for(reg i=0;i<(int)mem[j].size();++i){sum[j][i]=len[mem[j][i]];con[j]+=(ll)len[mem[j][i]]*abs(pre[mem[j][i]]);if(i) sum[j][i]+=sum[j][i-1];}tag[j]=0;ans+=con[j];for(reg i=L[be[r]];i<=r;++i){pre[i]+=c;}j=be[r];ans-=con[j];con[j]=0;mem[j].clear();sum[j].clear();for(reg i=L[j];i<=R[j];++i){pre[i]+=tag[j];mem[j].push_back(i);}sort(mem[j].begin(),mem[j].end(),cmp);sum[j].resize(mem[j].size());for(reg i=0;i<(int)mem[j].size();++i){sum[j][i]=len[mem[j][i]];con[j]+=(ll)len[mem[j][i]]*abs(pre[mem[j][i]]);if(i) sum[j][i]+=sum[j][i-1];}tag[j]=0;ans+=con[j];for(reg j=be[l]+1;j<=be[r]-1;++j){pre[0]=-tag[j];if(c==-1){int lp=upper_bound(mem[j].begin(),mem[j].end(),0,cmp)-mem[j].begin();--lp;//warning!! maybe -1if(lp!=-1){ans+=(ll)sum[j][lp];ans-=(ll)sum[j][mem[j].size()-1]-sum[j][lp];con[j]+=(ll)sum[j][lp];con[j]-=(ll)sum[j][mem[j].size()-1]-sum[j][lp];}else{ans-=(ll)sum[j][mem[j].size()-1];con[j]-=(ll)sum[j][mem[j].size()-1];}}else{int lp=lower_bound(mem[j].begin(),mem[j].end(),0,cmp)-mem[j].begin();--lp;//warning!! maybe -1if(lp!=-1){ans-=(ll)sum[j][lp];ans+=(ll)sum[j][mem[j].size()-1]-sum[j][lp];con[j]-=(ll)sum[j][lp];con[j]+=(ll)sum[j][mem[j].size()-1]-sum[j][lp];}else{ans+=(ll)sum[j][mem[j].size()-1];con[j]+=(ll)sum[j][mem[j].size()-1];}}tag[j]+=c;}pre[0]=0;}pos[q[o].id]=q[o].x;printf("%lld\n",ans);}return 0;
}}
signed main(){Miracle::main();return 0;
}/*Author: *Miracle*Date: 2019/4/11 10:31:35
*/

View Code

转载于:https://www.cnblogs.com/Miracevin/p/10691399.html

[BJOI2017]开车相关推荐

  1. P3992 [BJOI2017]开车

    P3992 [BJOI2017]开车 题意: 题解: 我们要先将问题转换 圈是车,x是加油站.红色部分为车移动的路线 数组a是车数量的前缀和 数组b是加油站的前缀和 而a[i]与b[i]的差的绝对值就 ...

  2. [洛谷 P3992] [BJOI2017]开车

    [BJOI2017]开车 P3992 题目大意 给出 \(n\) 个车的位置 \(a_i\) 和 \(n\) 个加油站的位置 \(b_i\) ,一辆车从 \(x\) 位置到 \(y\) 位置的代价为 ...

  3. matlab节约里程法_芳烃产业链里程碑:唐山旭阳30万吨/年苯乙烯项目一次性开车成功...

    近日,中国旭阳集团(1907.HK)旗下唐山旭阳30万吨/年苯乙烯项目分析化验合格后的苯乙烯从退料管线切至产品采出管线,标志着年产30万吨苯乙烯装置各流程全部打通,产品合格采出,装置一次性开车成功,使 ...

  4. 挡d挡切换_新手司机请问开车可以直接从“D档”挂到“S档”吗?

    现在越来越多的自动挡车辆都有S挡了,因此也有不少新手司机朋友问,在开车的时候,可以直接从"D挡"挂到"S挡"吗?笔者这里可以直接给出答案,驾驶者在驾驶车辆的时候 ...

  5. 不会英语计算机开车和,驾校学车的那些事儿——技术篇

    2016-10-17 10:25:25 在驾校学车的经历虽时日不长,但这段经历绝对要比校园时光更让人记忆深刻.今天就听小编来唠唠驾校学车的那些事儿.注意:本文指的驾校是二线城市以下考取C1证的驾校. ...

  6. hud抬头显示器哪个好_还在看汽车仪盘表?带你了解一下HUD抬头显示器,开车很方便...

    一直以来,抬头显示功能在汽车当中都是一个可望而不可及的配置,因为它只配备在豪华品牌汽车当中,而这些车型的价位动辄大几十万元,并不是谁都可以消费得起的.那么抬头显示功能到底为什么如此被豪车青睐呢? 在介 ...

  7. 河北高速盘点七大假牌假证违法案例:寒冬穿大裤衩开车

    高速交警执勤中.河北省公安厅高速公路交通警察总队供图 高速交警执勤中.河北省公安厅高速公路交通警察总队供图 中新网石家庄1月14日电 (黄歆尧)河北省公安厅高速公路交通警察总队14日透露,2018年1 ...

  8. 金鱼会开车?对,以色列新研究证明金鱼有陆地导航能力,还能看标志认出目的地...

    萧箫 发自 凹非寺 量子位 报道 | 公众号 QbitAI 只能在水中游动的金鱼,竟然学会了在地面上"开车"? 没错,它不仅能通过改变在鱼缸中游动的方向,来控制小车方向: 经过努力 ...

  9. 自动档车正确起步方法,自动挡开车起步7个步骤

    自动挡车正确起步方法(带有一键启动功能) 第一步,驾驶员坐到驾驶座后,不需要踩刹车,直接按一下启动键,此时ACC灯亮,然后再按多一下,此时车辆进行自检:建议每次冷启动都不要跳过自检的步骤,而热启动可以 ...

  10. NOIP2012开车旅行 【倍增】

    题目 小 A 和小 B 决定利用假期外出旅行,他们将想去的城市从 1 到 N 编号,且编号较小的城市在编号较大的城市的西边,已知各个城市的海拔高度互不相同,记城市 i 的海拔高度为Hi,城市 i 和城 ...

最新文章

  1. python 统计单词个数---不去重
  2. Altera FPGA配置过程
  3. c++适配器模式adapter
  4. 机器学习:贝叶斯和优化方法_Facebook使用贝叶斯优化在机器学习模型中进行更好的实验
  5. 怎么读取瑞萨mcu的 checksum_为物联网设备选择一颗“安全”的MCU
  6. 集成学习—决策树(CART)
  7. 湖南大学 离散数学 2018年期末考试 参考答案
  8. 设计开发-API代付系统/自动代付系统
  9. aac怎么转化为mp3格式?
  10. oracle表空间temp表空间满了,Oracle temp表空间爆满的处理方法
  11. 【NLP】文本匹配——Enhanced LSTM for Natural Language Inference阅读与总结
  12. The King’s Ups and Downs HDU - 4489(计数+dp)
  13. 群响刘思毅 | 创始人的流量焦虑
  14. win10的计算机是哪个版本,Windows 10系统都有哪些版本?老旧电脑装哪个版本的win10好?...
  15. 双曲三角函数图像及计算
  16. Proteus仿真工程文件打不开
  17. 基于python的量化投资(二) ---- 获取量化数据
  18. 使用 FFmpeg(bilibili视频blv合成mp4)
  19. 解决linux下.AppImage文件无法运行问题
  20. mysql取多字段各自合计_sql实现多字段求和并查询

热门文章

  1. FFA 2021 专场解读 - 实时数据湖
  2. 教你如何用Python自动下载抖音好看小姐姐,有对象的同学小心尝试!
  3. 道哥:我人生的两大选择,为的都是同一件事
  4. 一线城市的繁荣vs年轻人的梦想?
  5. Java基础---Java---基础加强---内省的简单运用、注解的定义与反射调用、 自定义注解及其应用、泛型及泛型的高级应用、泛型集合的综合
  6. jsonpath学习链接
  7. 简书python_python爬虫(以简书为例)
  8. 收银机打印数据截取_自助收银机大大节约了人力成本
  9. python json解析 超过对象_Python | 关于Requests与Json的使用小结
  10. arcgis dem栅格立体感_arcgis中DEM如何生成等高线