#树链剖分,zkw线段树#nssl 1489 大冰隙2
题目
有一个长度为\(n\)的01数列\(a\)和一个长度为\(n\)的数列\(b\)表示权值
支持单点修改以及区间查询,\(0\)和\(1\)可以看作左括号和右括号,
将一段区间所有可匹配的的括号去掉后求剩余位置的权值的最大值
分析
将这个序列看作dfs序,那显然可以将其看作一棵树,
建好树后问题就转换成树上路径查询最大值和单点修改
用两棵线段树维护上行和下行路径最大值即可,细节很多
代码
#include <cstdio>
#include <cctype>
#include <cstdlib>
#define rr register
#define getchar() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<13,stdin)),p1==p2?EOF:*p1++)
using namespace std;
const int N=100011;
struct node{int y,w,flag,next;}e[N]; struct rec{int x,y,flag;}P[N];
int a[2][N],A[2][N],dfn[N],as[N],tot,cnt,top[N]; char buf[1<<13],*p1,*p2;
int dep[N],fat[N],son[N],big[N],n,m,c[N],o[N],root,now,k;
inline signed iut(){
rr int ans=0; rr char c=getchar();
while (!isdigit(c)) c=getchar();
while (isdigit(c)) ans=(ans<<3)+(ans<<1)+(c^48),c=getchar();
return ans;
}
inline void print(int ans){
if (ans>9) print(ans/10);
putchar(ans%10+48);
}
inline void add(int x,int y,int w,int flag){e[++k]=(node){y,w,flag,as[x]},as[x]=k;}
inline signed max(int a,int b){return a>b?a:b;}
struct zkw{
int w[2][N<<2],bas;
inline void build(int n){
for (bas=1;(bas<<=1)<n+2;);
for (rr int i=bas+1;i<=bas+n;++i)
w[0][i]=a[0][i-bas],w[1][i]=a[1][i-bas];
for (rr int i=bas;i;--i)
w[0][i]=max(w[0][i<<1],w[0][i<<1|1]),
w[1][i]=max(w[1][i<<1],w[1][i<<1|1]);
}
inline void update(int z,int x,int y){
for (w[z][x+=bas]=y,x>>=1;x;x>>=1)
w[z][x]=max(w[z][x<<1],w[z][x<<1|1]);
}
inline signed query(int z,int x,int y){
rr int ans=0;
for (x+=bas-1,y+=bas+1;x^y^1;x>>=1,y>>=1){
if (!(x&1)) ans=max(ans,w[z][x^1]);
if (y&1) ans=max(ans,w[z][y^1]);
}
return ans;
}
}Tre;
inline signed Query(int x,int y){
rr int ans=0,flag=1;
for (;top[x]!=top[y];x=fat[top[x]]){
if (dep[top[x]]<dep[top[y]]) x^=y,y^=x,x^=y,flag^=1;
ans=max(ans,Tre.query(flag,dfn[top[x]],dfn[x]));
}
if (dep[x]>dep[y]) x^=y,y^=x,x^=y; else flag^=1;
if (dfn[x]<dfn[y]) ans=max(ans,Tre.query(flag,dfn[x]+1,dfn[y]));
return ans;
}
inline void dfs1(int x){
dep[x]=dep[fat[x]]+1,son[x]=1;
for (rr int i=as[x],mson=-1;i;i=e[i].next)
if (e[i].y!=fat[x]&&!dep[e[i].y]){
dfs1(e[i].y),son[x]+=son[e[i].y];
if (son[e[i].y]>mson)
big[x]=e[i].y,mson=son[e[i].y];
}
}
inline void dfs2(int x,int linp){
if (dfn[x]) return;
dfn[x]=++tot,a[0][tot]=A[0][x],
a[1][tot]=A[1][x],top[x]=linp;
if (!big[x]) return; dfs2(big[x],linp);
for (rr int i=as[x];i;i=e[i].next)
if (e[i].y!=fat[x]&&e[i].y!=big[x])
dfs2(e[i].y,e[i].y);
}
signed main(){
int size = 256 << 20;
char *p=(char*)malloc(size) + size;
__asm__("movl %0, %%esp\n" :: "r"(p) );
n=iut(),m=iut(),root=now=cnt=1;
for (rr int i=1;i<=n;++i) o[i]=iut();
for (rr int i=1;i<=n;++i) c[i]=iut();
for (rr int i=1;i<=n;++i)
if (!o[i]) add(now,++cnt,c[i],0),A[0][cnt]=c[i],P[i]=(rec){now,cnt,0},fat[cnt]=now,now=cnt;
else if (now==root) add(++cnt,now,c[i],1),A[1][now]=c[i],P[i]=(rec){cnt,now,1},fat[now]=cnt,root=now=cnt;
else add(fat[now],now,c[i],1),A[1][now]=c[i],P[i]=(rec){fat[now],now,1},now=fat[now];
dfs1(root),dfs2(root,root),Tre.build(cnt);
for (;m;--m){
rr int z=iut(),x=iut(),y=iut();
if (z==1) Tre.update(P[x].flag,dfn[P[x].y],y),c[x]=y;
else{
if (x==y) {print(c[x]),putchar(10); continue;}
rr int Xx=P[x].x,Yx=P[x].y,flagx=P[x].flag;
rr int Xy=P[y].x,Yy=P[y].y,flagy=P[y].flag;
if (Yx==Yy) {putchar(48),putchar(10); continue;}
print(Query(!flagx?Xx:Yx,flagy?Xy:Yy)),putchar(10);
}
}
return 0;
}
#树链剖分,zkw线段树#nssl 1489 大冰隙2的更多相关文章
- HDU 4366 Successor(树链剖分+zkw线段树+扫描线)
[题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=4366 [题目大意] 有一个公司,每个员工都有一个上司,所有的人呈树状关系,现在给出每个人的忠诚值和 ...
- bzoj 4034 [HAOI2015] T2(树链剖分,线段树)
4034: [HAOI2015]T2 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 1536 Solved: 508[Submit][Status] ...
- bzoj 1036 [ZJOI2008]树的统计Count(树链剖分,线段树)
1036: [ZJOI2008]树的统计Count Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 10677 Solved: 4313[Submit ...
- poj 3237 Tree(树链剖分,线段树)
Tree Time Limit: 5000MS Memory Limit: 131072K Total Submissions: 7268 Accepted: 1969 Description ...
- bzoj 3626 [LNOI2014]LCA(离线处理+树链剖分,线段树)
3626: [LNOI2014]LCA Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1272 Solved: 451[Submit][Status ...
- bzoj 2243 [SDOI2011]染色(树链剖分,线段树)
2243: [SDOI2011]染色 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 4637 Solved: 1726[Submit][Status ...
- 【BZOJ3531】旅行(树链剖分,线段树)
[BZOJ3531]旅行(树链剖分,线段树) 题面 Description S国有N个城市,编号从1到N.城市间用N-1条双向道路连接,满足 从一个城市出发可以到达其它所有城市.每个城市信仰不同的宗教 ...
- 【BZOJ5507】[GXOI/GZOI2019]旧词(树链剖分,线段树)
[BZOJ5507][GXOI/GZOI2019]旧词(树链剖分,线段树) 题面 BZOJ 洛谷 题解 如果\(k=1\)就是链并裸题了... 其实\(k>1\)发现还是可以用类似链并的思想,这 ...
- [bzoj4196][Noi2015]软件包管理器_树链剖分_线段树
软件包管理器 bzoj-4196 Noi-2015 题目大意:Linux用户和OSX用户一定对软件包管理器不会陌生.通过软件包管理器,你可以通过一行命令安装某一个软件包,然后软件包管理器会帮助你从软件 ...
- 【洛谷5439】【XR-2】永恒(树链剖分,线段树)
[洛谷5439][XR-2]永恒(树链剖分,线段树) 题面 洛谷 题解 首先两个点的\(LCP\)就是\(Trie\)树上的\(LCA\)的深度. 考虑一对点的贡献,如果这两个点不具有祖先关系,那么这 ...
随机推荐
- Docker进阶之02-Swarm集群入门实践
Docker集群概述 Docker集群有2种方案: 1.在Docker Engine 1.12之前的集群模式被称为经典集群,这是通过API代理系统实现的集群,目前已经不再维护. 2.自Docker E ...
- Maven应用常见问题
在Spring Boot项目中打包指定类为启动类 <build> <plugins> <plugin> <groupId>org.springframe ...
- 使用原生 cookieStore 方法,让 Cookie 操作更简单
前言 对于前端来讲,我们在操作cookie时往往都是基于document.cookie,但它有一个缺点就是操作复杂,它并没有像localStorage那样提供一些get或set等方法供我们使用.对与c ...
- 【Azure 服务总线】Azure.Messaging.ServiceBus 多次发送消息报超时错误,是否可以配置重新发送?是否有内置重试机制?
问题描述 使用 Azure Service Bus,提供应用程序之间松耦合的消息交换,但是有时候发送消息多次出现超时错误. A connection attempt failed because th ...
- 【Azure Redis 缓存】Azure Cache for Redis 服务的导出RDB文件无法在自建的Redis服务中导入
问题描述 使用微软云的Redis服务,导出它的RDB文件后,想把数据恢复到本地自建的Redis服务中,发现出现如下错误: 15000:S 21 Jun 08:14:11.199 * Retrying ...
- 一个利用go反向代理解决api转发的例子(go反向代理)
实现的效果: 如果访问的url路径是类似 /163/ 或 /163/debian 的形式,则转发到163开源镜像服务器 直接上代码: package main import ( "fmt& ...
- Nebula 在 Akulaku 智能风控的实践:图模型的训练与部署
本文整理自 Akulaku 反欺诈团队在 nMeetup·深圳场的演讲,B站视频见:https://www.bilibili.com/video/BV1nQ4y1B7Qd 这次主要来介绍下 Nebul ...
- [Linux] rockylinux9.1 的部署使用过程 -- ZFS 虚拟机 cockpit podman samba
备选镜像 | Rocky Linux rocky linux 使用记录 - 个人文章 - SegmentFault 思否 # https://blog.csdn.net/NeverGUM/articl ...
- Java 常用类 String的使用---测试
1 package com.bytezero.stringclass; 2 3 import org.junit.Test; 4 5 /** 6 * 7 * 8 * 9 * @author Bytez ...
- 使用 Abp.Zero 搭建第三方登录模块(四):微信小程序开发
简短回顾一下微信小程序端的流程: 用户通过扫码进入小程序的鉴权页面,更新状态到ACCESSED已扫码 用户点击确认授权,微信通过wx.login()接口获取第三方登录的必要信息:Code登录凭证. ...