[cf1491H]Yuezheng Ling and Dynamic Tree
将其按照区间分块(即$[(i-1)K+1,iK]$作为一个块),并定义$f_{x}$表示$x$的祖先中编号最小且与$x$在同一个块内的节点,$f_{x}$可以通过$f_{a_{x}}$转移,即$f_{x}=\begin{cases}f_{a_{x}}\ \ \ (x与a_{x}在一个块中)\\x\ \ \ \ \ \ (x与a_{x}不在一个块中)\end{cases}$
(特别的,若$x$在第一个块中则$f_{x}=1$)
通过$f_{x}$,类似于树剖的方式,即若两者$f_{x}$不同则移动$f_{x}$较大的(移动到$f_{x}$),直至相同再用同样的方式爬$a_{x}$,复杂度显然是$o(q\sqrt{n})$的
接下来是如何维护$f_{x}$,即如何支持修改:
对于边角的两个块,显然是可以暴力维护的,对于整块修改,显然当一个块被修改$\sqrt{n}$次后一定有$f_{x}=x$,因此至多$o(n)$次暴力,复杂度也是$o(n\sqrt{n})$
最终总复杂度即为$o((n+q)\sqrt{n})$

1 #include<bits/stdc++.h>
2 using namespace std;
3 #define N 100005
4 int n,m,K,p,x,y,z,a[N],bl[N],st[N],ed[N],f[N];
5 long long tag[N];
6 int get(int k){
7 return max(a[k]-tag[bl[k]],1LL);
8 }
9 void calc(int x,int y){
10 for(int i=x;i<=y;i++)
11 if (bl[i]==1)f[i]=1;
12 else{
13 int x=get(i);
14 if (bl[x]!=bl[i])f[i]=i;
15 else f[i]=f[x];
16 }
17 }
18 int main(){
19 scanf("%d%d",&n,&m);
20 for(int i=2;i<=n;i++)scanf("%d",&a[i]);
21 K=(int)sqrt(n);
22 for(int i=1;i<=n;i++)bl[i]=(i-1)/K+1;
23 for(int i=1;i<=bl[n];i++){
24 st[i]=(i-1)*K+1;
25 ed[i]=min(i*K,n);
26 calc(st[i],ed[i]);
27 }
28 calc(1,n);
29 for(int i=1;i<=m;i++){
30 scanf("%d%d%d",&p,&x,&y);
31 if (p==1){
32 scanf("%d",&z);
33 if (bl[x]==bl[y]){
34 for(int j=x;j<=y;j++)a[j]=max(a[j]-z,1);
35 calc(st[bl[x]],ed[bl[x]]);
36 }
37 else{
38 for(int j=x;j<=ed[bl[x]];j++)a[j]=max(a[j]-z,1);
39 calc(st[bl[x]],ed[bl[x]]);
40 for(int j=st[bl[y]];j<=y;j++)a[j]=max(a[j]-z,1);
41 calc(st[bl[y]],ed[bl[y]]);
42 for(int j=bl[x]+1;j<=bl[y]-1;j++){
43 tag[j]+=z;
44 if (tag[j]-z<=K)calc(st[j],ed[j]);
45 }
46 }
47 }
48 else{
49 while (f[x]!=f[y]){
50 if (f[x]>f[y])swap(x,y);
51 y=get(f[y]);
52 }
53 if (x==y){
54 printf("%d\n",x);
55 continue;
56 }
57 while (get(x)!=get(y)){
58 if (get(x)>get(y))swap(x,y);
59 y=get(y);
60 }
61 if (x==y)printf("%d\n",x);
62 else printf("%d\n",get(x));
63 }
64 }
65 }
[cf1491H]Yuezheng Ling and Dynamic Tree的更多相关文章
- Codeforces 1491H - Yuezheng Ling and Dynamic Tree(分块)
Codeforces 题目传送门 & 洛谷题目传送门 *3400 的毒瘤 H 题,特意写个题解纪念一下( 首先对于这种数据结构不太好直接维护的东东可以考虑分块.然鹅我除了分块其他啥也没想到 我 ...
- Solution -「CF 1491H」Yuezheng Ling and Dynamic Tree
\(\mathcal{Description}\) Link. 做题原因:题目名. 给定一个长度 \(n-1\) 的序列 \(\{a_2,a_3,\cdots,a_n\}\),其描述了一棵 \ ...
- 10+ 最流行的 jQuery Tree 菜单插件
jstree – jQuery Tree Plugin With HTML & JSON Data jstree is a lightweight and flexible jQuery pl ...
- java基础十[包、Jar存档文件和部署](阅读Head First Java记录)
将Java的class文件生成为可执行的Java应用程序.Java应用程序有三种:完全在本机执行的Jar(例如本机的GUI可执行程序):完全在服务器端远程执行的(例如浏览器来进行存取):介于两者之间的 ...
- FTP客户端上传下载Demo实现
1.第一次感觉MS也有这么难用的MFC类: 2.CFtpFileFind类只能实例化一个,多个实例同时查找会出错(因此下载时不能递归),采用队列存储目录再依次下载: 3.本程序支持文件夹嵌套上传下载: ...
- [ActionScript 3.0] Away3D 官网实例
/* Dynamic tree generation and placement in a night-time scene Demonstrates: How to create a height ...
- PeopleCode事件和方法只用于online界面不能用于组件接口(component interface)
在使用CI过程中,哪些方法是不能使用的.以下为PeopleBook解释的内容. 一.搜索框代码不执行:SearchInit, SearchSave, and RowSelect events 意味着使 ...
- table2excel使用
原table2excel代码 /* * 采用jquery模板插件——jQuery Boilerplate * * Made by QuJun * 2017/01/10 */ //table2excel ...
- dhtmlxtree 如何得到xml,json等文件中的自定义的属性值
先看代码: var TreeForJSON = new dhtmlXTreeObject('TreeForJSON', '100%', '100%', 0); TreeForJSON.setImage ...
随机推荐
- 洛谷 P1862 输油管道问题
题意 题目链接:P1862 输油管道问题 不难看出每个油井的 \(x\) 坐标是没用的,所以问题转化为如下. 代数意义:给出 \(n\) 个数 \(y_1,y_2,\ldots,y_n\),找一个数 ...
- IIS部署WCF详细教程
前言: 前段时间接手了公司一个十几年前的老项目,该项目对外提供的服务使用的是WCF进行通信的.因为需要其他项目需要频繁的使用该WCF服务,所以我决定把这个WCF部署到IIS中避免每次调试运行查看效果. ...
- MacOS上通过虚拟机搭建基础CentOS7系统环境
MacOS上通过虚拟机搭建基础CentOS7系统环境 尽管从Mac的Terminal可以看出,macOS与UNIX.Linux或多或少都有血缘关系(shell.bash等),但是在mac进行Linux ...
- 从commons-beanutils反序列化到shiro无依赖的漏洞利用
目录 0 前言 1 环境 2 commons-beanutils反序列化链 2.1 TemplatesImple调用链 2.2 PriorityQueue调用链 2.3 BeanComparator ...
- Python Pandas的使用 !!!!!详解
Pandas是一个基于python中Numpy模块的一个模块 Python在数据处理和准备⽅⾯⼀直做得很好,但在数据分析和建模⽅⾯就差⼀些.pandas帮助填补了这⼀空⽩,使您能够在Python中执 ...
- SpringBoot-集成SpringSecurity
在 Web 开发中,安全一直是非常重要的一个方面. 安全虽然属于应用的非功能性需求,但是从应用开发的第一天就应该把安全相关的因素考虑进来,并在整个应用的开发过程中. Spring Security官网 ...
- iOS能否自动扫描周边wifi信息并通过密码连接
能否获取系统wifi列表信息 不能,只能获取用户当前连接的wifi信息 https://developer.apple.com/forums/thread/112177 https://develop ...
- Spring Cloud Alibaba 介绍及工程准备
简介 SpringCloud Alibaba是阿里巴巴集团开源的一套微服务架构解决方案. 微服务架构是为了更好的分布式系统开发,将一个应用拆分成多个子应用,每一个服务都是可以独立运行的子工程.其中涵盖 ...
- stm32串口学习笔记
stm32作为现在嵌入式物联网单片机行业中经常要用多的技术,相信大家都有所接触,今天这篇就给大家详细的分析下有关于stm32的出口,还不是很清楚的朋友要注意看看了哦,在最后还会为大家分享有些关于stm ...
- jQuery实现打开网页自动弹出遮罩层或点击弹出遮罩层功能示例
本文实例讲述了jQuery实现打开网页自动弹出遮罩层或点击弹出遮罩层功能.分享给大家供大家参考,具体如下: 弹出层:两种方式 一是打开网页就自动弹出层二是点击弹出 <!DOCTYPE html ...