[POJ3237] 树的维护 题解

一眼树链剖分或 \(LCT\),由于在学后者所以就写了。

取反操作相当于把 \(min,max\) 取反后交换,所以要维护 \(min,max,val\)

时间复杂度 \(O(m\log n)\)

#include<bits/stdc++.h>
#define fa(x) lct[x].fa
#define fl(x) lct[x].fl
#define mx(x) lct[x].mx
#define mn(x) lct[x].mn
#define id(x) lct[x].id
#define val(x) lct[x].val
#define sn(x,i) lct[x].sn[i]
#define inf 1000000000
using namespace std;
const int N=20005;
struct node{int sn[2],fa,fl,mx,mn,val,id;
}lct[N];int n,m,tp,st[N];
int check(int x){return sn(fa(x),0)!=x&&sn(fa(x),1)!=x;
}int chksn(int x){return sn(fa(x),1)==x;
}void push_up(int x){mx(x)=max({mx(sn(x,0)),mx(sn(x,1)),x>n?val(x):-inf});mn(x)=min({mn(sn(x,0)),mn(sn(x,1)),x>n?val(x):inf});
}void push_down(int x){if(!x) return;if(fl(x)){fl(sn(x,0))^=1,fl(sn(x,1))^=1;swap(sn(x,0),sn(x,1)),fl(x)=0;}if(!id(x)) return;id(x)=0,swap(mx(sn(x,0)),mn(sn(x,0)));swap(mx(sn(x,1)),mn(sn(x,1)));id(sn(x,0))^=1,id(sn(x,1))^=1;val(sn(x,0))=-val(sn(x,0));val(sn(x,1))=-val(sn(x,1));mx(sn(x,0))=-mx(sn(x,0));mn(sn(x,0))=-mn(sn(x,0));mx(sn(x,1))=-mx(sn(x,1));mn(sn(x,1))=-mn(sn(x,1));
}void rotate(int x){int y=fa(x),z=fa(y),k=chksn(x);if(!check(y))sn(z,chksn(y))=x;fa(x)=z,fa(y)=x,fa(sn(x,1-k))=y;sn(y,k)=sn(x,1-k),sn(x,1-k)=y;push_up(y);
}void splay(int x){st[tp=1]=x;for(int i=x;!check(i);i=fa(i)) st[++tp]=fa(i);while(tp) push_down(st[tp--]);while(!check(x)){int y=fa(x),z=fa(y);if(!check(y))rotate(chksn(x)!=chksn(y)?x:y);rotate(x);}push_up(x);
}void access(int x){for(int i=0;x;i=x,x=fa(x))splay(x),sn(x,1)=i,push_up(x);
}void mk(int x){access(x),splay(x),fl(x)^=1;
}void split(int x,int y){mk(x),access(y),splay(y);
}void link(int x,int y){mk(x),access(y),fa(x)=y;
}int main(){ios::sync_with_stdio(0);cin.tie(0),cout.tie(0);cin>>n,mx(n)=-inf,mn(n)=inf;mx(0)=-inf,mn(0)=inf;for(int i=1;i<n;i++){mx(i)=-inf,mn(i)=inf;int x,y,z;cin>>x>>y>>z;mx(n+i)=mn(n+i)=val(n+i)=z;link(x,n+i),link(n+i,y);}while(1){string s;int x,y;cin>>s;if(s=="DONE") break;cin>>x>>y;if(s=="NEGATE"){split(x,y),id(y)^=1;swap(mx(y),mn(y)),val(y)=-val(y);mx(y)=-mx(y),mn(y)=-mn(y);}if(s=="CHANGE")mk(n+x),mn(n+x)=mx(n+x)=val(n+x)=y;if(s=="QUERY") split(x,y),cout<<mx(y)<<"\n";}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/865048.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Window迷你网页服务器MyWebServer v3.8.195支持php

前言全局说明Window迷你网页服务器MyWebServer v3.8.195支持php一、说明 1.1 老版本说明、历史版本下载、php下载: https://www.cnblogs.com/wutou/p/18655971二、MyWebServer v3.8.195支持php 2.12.2免责声明:本号所涉及内容仅供安全研究与教学使用,如出现其他风险,后果自负…

用 2025 年的工具,秒杀了 2022 年的题目。

你好呀,我是歪歪。 前几天打开知乎的时候,在付费咨询模块,我看到了一个差不多两年半前没有回答的技术问题。其实这个问题问的很清晰了,但是当时我拒绝了:虽然过去快两年半的时间,但是我记得还是比较清楚,当时拒绝的理由是如果让我来回答这个问题,我肯定是首选基于 Redi…

VS2022添加Qt窗口类(带.ui文件)

1、项目-属性-右键-添加-模块

基于自抗扰控制器和线性误差反馈控制律(ADRC-LSEF)的控制系统simulink建模与仿真

1.课题概述 基于自抗扰控制器和线性误差反馈控制律(ADRC-LSEF)的控制系统simulink建模与仿真。2.系统仿真结果 3.核心程序与模型 版本:MATLAB2022a 4.系统原理简介自抗扰控制器(Active Disturbance Rejection Controller, ADRC)结合线性误差反馈控制律(Linear Error Feedback…

MediaWIKI 1.43 教程系列 4 — MediaWIKI 安装后的基本配置

1. 更改logo 将自己的logo 导入到 Mediawiki 的安装目录,即 /var/www/mediawiki/里面的 /resources/assets 然后修改 LocalSettings.php 文件内容,更改如下$wgLogos = [1x => "$wgResourceBasePath/resources/assets/mediawiki.png",icon => "$wgReso…

在iStoreOS上配置frpc客户端

摘自:https://www.koolcenter.com/posts/224 安装frpc,直接在iStoreOS商店找到全部软件。输入名称点新增:填写ip地址以及端口:web 配置看图:

中考英语优秀范文-010 The Spring Festival 春节

1 写作要求 近年来我国的发展世人瞩目,中国的传统文化正越来越受到各国朋友的关注。请根据提示,以 “The Spring Festival” 为题写一篇短文,向外国朋友介绍我国的春节。 要求: 1、字迹工整,规范; 2、 80词左右。 2 优秀范文 The Spring Festival In China, the Spring f…

FANUC机器人M-410iB/700电机断轴维修方法

发那科(FANUC)作为电机领域的领袖品牌,其伺服电机广泛应用于各种工业设备中,特别是在机床、自动化控制、机器人等领域。然而,即使是如此高品质的伺服电机,也难免会出现FANUC工业机械手电机故障,其中断轴故障是比较常见的一种。 一、法兰克机械手电机断轴故障原因分析 1.…

第四章 保护模式入门

本文是对《操作系统真象还原》第四章学习的笔记,欢迎大家一起交流。第四章 保护模式入门 本文是对《操作系统真象还原》第四章学习的笔记,欢迎大家一起交流。 知识部分 为什么要有保护模式? 实模式下安全问题:实模式下操作系统和用户程序属于同一特权级,平起平坐,没有区别…

FMC子卡设计原理图:FMC228-四路1.2Gsps 16bit DA FMC子卡

FMC子卡 , 高性能异构计算卡 , 雷达图像处理 , 模拟信号采集板卡 , 模拟信号输入FMC228-四路1.2Gsps 16bit DA FMC子卡 一、板卡概述FMC228 板卡可实现宽波段、四通道、16位、1.2Gsps(600Msps直接射频综合)DAC功能,时钟可采用内部时钟源(可选择锁定到外部参考),或外部提供…

FMC子卡设计原理图:165-2路万兆光纤SFP+ FMC子卡模块

2路万兆光纤SFP+ FMC子卡模块1. 概述  该板卡是基于kc705和ml605的fmc 10g万兆光纤扩展板设计。  SFP+(10 Gigabit Small Form Factor Pluggable)是一种可热插拔的,独立于通信协议的光学收发器,通常传输光的波长是 850nm, 1310nm 或1550nm,用于10G bps的SONET/SDH,光…

FMC子卡设计方案:127-4通道 12bit 125Msps 直流耦合 AD FMC 子卡

DA输出子卡 , FMC 子卡 , 中低频信号采集 , 模拟信号输入 , FL9627模块4通道 12bit 125Msps 直流耦合 AD FMC 子卡一、板卡概述:FMC 高速 AD 模块 FL9627 为 4 路 125MSPS, 12 位的模拟信号转数字信号模块。 FMC 模块的 AD 转换采用了 2 片 ADI 公司的 AD9627 芯片,每个 AD9…