线段树每个节点维护d[4][4]表示四个顶点之间的最短路,合并时用Floyed合并,查询时分三段然后合并。

#include<cstdio>
#define N 100010
struct P{int d[4][4];}T[N<<2],tmp;
int n,m,op,x,y,u,v,i,j,k,a[N],b[N],c[N],f[8][8],g[8][8],inf=~0U>>2,flag,ans,d1,d2;
inline void up(int&x,int y){if(x>y)x=y;}
inline void floyed(int n){for(k=0;k<n;k++)for(i=0;i<n;i++)for(j=0;j<n;j++)up(f[i][j],f[i][k]+f[k][j]);}
inline void cal(P&x,int p){for(i=0;i<4;i++)for(j=0;j<4;j++)if(i==j)f[i][j]=0;else f[i][j]=inf;f[0][1]=f[1][0]=b[p];f[2][3]=f[3][2]=b[p+1];f[0][2]=f[2][0]=a[p];f[1][3]=f[3][1]=c[p];floyed(4);for(i=0;i<4;i++)for(j=0;j<4;j++)x.d[i][j]=f[i][j];
}
inline void up(P&x,P l,P r){for(i=0;i<6;i++)for(j=0;j<6;j++)if(i==j)f[i][j]=0;else f[i][j]=inf;for(i=0;i<4;i++)for(j=0;j<4;j++)up(f[i][j],l.d[i][j]),up(f[i+2][j+2],r.d[i][j]);floyed(6);for(i=0;i<4;i++)for(j=0;j<4;j++)x.d[i][j]=f[i>1?i+2:i][j>1?j+2:j];
}
void build(int x,int a,int b){if(a+1==b){cal(T[x],a);return;}int mid=(a+b)>>1;build(x<<1,a,mid),build(x<<1|1,mid,b),up(T[x],T[x<<1],T[x<<1|1]);
}
void change(int x,int a,int b,int c){if(a+1==b){cal(T[x],a);return;}int mid=(a+b)>>1;if(c<mid)change(x<<1,a,mid,c);else change(x<<1|1,mid,b,c);up(T[x],T[x<<1],T[x<<1|1]);
}
void ask(int x,int a,int b,int c,int d){if(c<=a&&b<=d){if(!flag)flag=1,tmp=T[x];else up(tmp,tmp,T[x]);return;}int mid=(a+b)>>1;if(c<mid)ask(x<<1,a,mid,c,d);if(d>mid)ask(x<<1|1,mid,b,c,d);
}
int main(){scanf("%d",&n);for(i=1;i<n;i++)scanf("%d",&a[i]);for(i=1;i<=n;i++)scanf("%d",&b[i]);for(i=1;i<n;i++)scanf("%d",&c[i]);build(1,1,n);scanf("%d",&m);while(m--){scanf("%d%d%d",&op,&x,&y);if(!op){if(x==0)scanf("%d",&a[y]);if(x==1)scanf("%d",&b[y]);if(x==2)scanf("%d",&c[y]);if(y<n)change(1,1,n,y);if(y>1)change(1,1,n,y-1);}else{if(x==y){puts("0");continue;}if(x>y)i=x,x=y,y=i;u=(x+1)/2,v=(y+1)/2,d1=x&1^1,d2=y&1^1;if(u==v){ans=b[u];if(u>1)flag=0,ask(1,1,n,1,u),up(ans,tmp.d[2][3]);if(u<n)flag=0,ask(1,1,n,u,n),up(ans,tmp.d[0][1]);}else{for(i=0;i<8;i++)for(j=0;j<8;j++)if(i==j)g[i][j]=0;else g[i][j]=inf;flag=0,ask(1,1,n,u,v);for(i=0;i<4;i++)for(j=0;j<4;j++)up(g[i+2][j+2],tmp.d[i][j]);if(u>1)for(flag=0,ask(1,1,n,1,u),i=0;i<4;i++)for(j=0;j<4;j++)up(g[i][j],tmp.d[i][j]);if(v<n)for(flag=0,ask(1,1,n,v,n),i=0;i<4;i++)for(j=0;j<4;j++)up(g[i+4][j+4],tmp.d[i][j]);for(i=0;i<8;i++)for(j=0;j<8;j++)f[i][j]=g[i][j];floyed(8);ans=f[2+d1][4+d2];}printf("%d\n",ans);}}return 0;
}

  

BZOJ2459 : [BeiJing2011]神秘好人相关推荐

  1. 大数据背后的神秘定理:贝叶斯公式

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 引子 昨天下午趁着出去调研在湖滨银泰的星巴克做网易机器学习实习生岗 ...

  2. 大数据背后的神秘公式:贝叶斯公式

    大数据.人工智能.海难搜救.生物医学.邮件过滤,这些看起来彼此不相关的领域之间有什么联系?答案是,它们都会用到同一个数学公式--贝叶斯公式.它虽然看起来很简单.很不起眼,但却有着深刻的内涵.那么贝叶斯 ...

  3. 白老大的身份鸿蒙之始,冒险王卫斯理白老大真实身份大揭秘 白老大是好人还是坏人?...

    网剧<冒险王卫斯理>自播出之后就备受关注,据悉这部集结了余文乐.任达华.林家栋三大男神的电视剧在播出之后却没有得到预想之中的好评,被不少网友吐槽剧情不走心,翻拍的也没有原来精彩.自这部剧里 ...

  4. 币圈操盘手自白:我想做个好人

    这种东西再过个 200 年.500 年它都不会死.只要有人在的地方.有钱在的地方,就有贪念和欲望. 文 | 多肉  运营 | 盖遥  编辑 | 卢晓明 出品 | Odaily星球日报(ID:o-dai ...

  5. 仅需6步,教你轻易撕掉app开发框架的神秘面纱(1):确定框架方案

    遇到的问题   做游戏的时候用的是cocos2dx+lua,游戏开发自有它的一套框架机制.而现在公司主要项目要做android和iOS应用.本文主要介绍如何搭建简单易用的App框架. 如何解决   对 ...

  6. 了解黑客的关键工具---揭开Shellcode的神秘面纱

    2019独角兽企业重金招聘Python工程师标准>>> ref:  http://zhaisj.blog.51cto.com/219066/61428/ 了解黑客的关键工具---揭开 ...

  7. SQL性能优化没有那么神秘

    经常听说SQL Server最难的部分是性能优化,不禁让人感到优化这个工作很神秘,这种事情只有高手才能做.很早的时候我在网上看到一位高手写的博客,介绍了SQL优化的问题,从这些内容来看,优化并不都是一 ...

  8. [Bzoj4408]神秘数(主席树)

    Description 一个可重复数字集合S的神秘数定义为最小的不能被S的子集的和表示的正整数. 例如S={1,1,1,4,13}, 1 = 1 2 = 1+1 3 = 1+1+1 4 = 4 5 = ...

  9. 神秘又强大的@SpringBootApplication注解

    作者:vivo 互联网服务器团队-Peng peng 一.前言 大部分的配置都可以用Java类+注解来代替,而在SpringBoot项目中见的最多的莫过于@SpringBootApplication注 ...

最新文章

  1. Python实现文本自动分类(朴素贝叶斯方法)
  2. 面试官竟让我用Redis实现一个消息队列!
  3. 谈谈一些有趣的CSS题目(十一)-- reset.css 知多少?
  4. php查询快递,php查询快递的类
  5. python股票回测_用Python徒手撸一个股票回测框架搭建【推荐】
  6. FoxMail邮箱配置
  7. NodeJS 搭建图形识别功能
  8. 网页 flash swf 无法调用 摄像头 问题解决
  9. 企业网站网络营销的第一印象
  10. 程序员需谨记的8条团队开发原则
  11. 雷泰RAYR3I2MSCL3+高温红外测温仪的参数指标
  12. unity内部自带局域网制作
  13. TikTok 被盯上原来是扎克伯格背后搞的鬼?
  14. 基于易灵思开发板RiscV的调试流程
  15. 肖风:区块链是驱动社会数字化迁徙的重要工具
  16. 走格子(数学组合/动态规划)
  17. linux c++编程教程,Linux下的C++编程入门教程.ppt
  18. Python之父吉多·范罗苏姆为什么要将这种编程语言取名“Python”
  19. NISP二级换CISP的时候需要再花钱吗?【NISP】管理中心
  20. 用友致远OA不能加签、插入附件的解决方法(A8-m企业集团版)

热门文章

  1. matlab如何excel数据,Matlab如何读取Excel里的数据
  2. hadoop删除节点
  3. [Android] Implementation vs API dependency
  4. 李彦宏妻子马东敏向中国科大捐赠1亿 成立蔷薇基金
  5. 从exe4j生成的exe中抽取jar文件
  6. Struts2+Spring+Hibernate环境搭建
  7. 一次关于cisco的portfast网络故障
  8. WQL Analyzer V1.1(WMI查询分析器)
  9. 肖婧医生直播讲稿整理
  10. xfce中的window manager