#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
const int maxn=;
struct node{
int ls,rs,fa,is_root;
}tr[maxn];
int n,m,siz[maxn],k[maxn];
void update(int x){
siz[x]=;
if(tr[x].ls)siz[x]+=siz[tr[x].ls];
if(tr[x].rs)siz[x]+=siz[tr[x].rs];
}
void rx(int x){
int y=tr[x].fa,z=tr[y].fa;
tr[y].ls=tr[x].rs;
if(tr[x].rs)tr[tr[x].rs].fa=y;
tr[x].rs=y;tr[y].fa=x;
tr[x].fa=z;
if(z&&!tr[y].is_root){//注意这句判断,辅助树之间的边是单向的;
if(tr[z].ls==y)tr[z].ls=x;else tr[z].rs=x;
}
if(tr[y].is_root)tr[x].is_root=,tr[y].is_root=;
update(y);update(x);
}
void lx(int x){
int y=tr[x].fa,z=tr[y].fa;
tr[y].rs=tr[x].ls;
if(tr[x].ls)tr[tr[x].ls].fa=y;
tr[x].ls=y;tr[y].fa=x;
tr[x].fa=z;
if(z&&!tr[y].is_root){
if(tr[z].ls==y)tr[z].ls=x;else tr[z].rs=x;
}
if(tr[y].is_root)tr[x].is_root=,tr[y].is_root=;
update(y);update(x);
}
void splay(int x){
while(!tr[x].is_root){
int y=tr[x].fa,z=tr[y].fa;
if(tr[y].is_root){if(tr[y].ls==x)rx(x);else lx(x);}
else{
if(tr[z].ls==y&&tr[y].ls==x){rx(y);rx(x);}
else if(tr[z].ls==y&&tr[y].rs==x){lx(x);rx(x);}
else if(tr[z].rs==y&&tr[y].ls==x){rx(x);lx(x);}
else{lx(y);lx(x);}
}
}
}
void ace(int x){
int y=;
do{
splay(x);
tr[tr[x].rs].is_root=;
tr[tr[x].rs=y].is_root=;
update(x);
x=tr[y=x].fa;
}while(x);
}
void link(int u,int v){//虽然说是link,但也包含和原来的断开然后和新的连上的两个过程
if(v>n)v=;
ace(u);splay(u);
tr[tr[u].ls].is_root=;
tr[tr[u].ls].fa=;tr[u].ls=;
tr[u].fa=v;update(u);
}
int query(int x){
ace(x);splay(x);
return siz[tr[x].ls]+;
}
int main(){
scanf("%d",&n);
for(int i=;i<=n;++i){
tr[i].is_root=siz[i]=;
tr[i].fa=tr[i].ls=tr[i].rs=;
}
for(int i=;i<=n;++i){
scanf("%d",&k[i]);
link(i,i+k[i]);
}
scanf("%d",&m);
int op,pos,cha;
for(int i=;i<=m;++i){
scanf("%d%d",&op,&pos);
if(op==)printf("%d\n",query(pos+));
else{
scanf("%d",&cha);
link(pos+,pos+cha+);
}
}
//system("pause");
return ;
}

bzoj2002(lct模板)的更多相关文章

  1. BZOJ2002 & LCT模板(分块不会搞)

    题意: 看题. 某天,Lostmonkey发明了一种超级弹力装置,为了在他的绵羊朋友面前显摆,他邀请小绵羊一起玩个游戏.游戏一开始,Lostmonkey在地上沿 着一条直线摆上n个装置,每个装置设定初 ...

  2. LCT模板

    之前一直用的LCT模板,因为其实个人对LCT和Splay不是很熟,所以用起来总觉得略略的坑爹,过了一段时间就忘了,但事实上很多裸的LCT要改的东西是不多的,所以今天写了些注释,以后可能套起模板来会得心 ...

  3. LCT 模板及套路总结

    这一个月貌似已经考了无数次\(LCT\)了..... 保险起见还是来一发总结吧..... A. LCT 模板 \(LCT\) 是由大名鼎鼎的 \(Tarjan\) 老爷发明的. 主要是用来维护树上路径 ...

  4. [洛谷P1501] [国家集训队]Tree II(LCT模板)

    传送门 这是一道LCT的板子题,说白了就是在LCT上支持线段树2的操作. 所以我只是来存一个板子,并不会讲什么(再说我也不会,只能误人子弟2333). 不过代码里的注释可以参考一下. Code #in ...

  5. LuoguP3690 【模板】Link Cut Tree (动态树) LCT模板

    P3690 [模板]Link Cut Tree (动态树) 题目背景 动态树 题目描述 给定n个点以及每个点的权值,要你处理接下来的m个操作.操作有4种.操作从0到3编号.点从1到n编号. 0:后接两 ...

  6. bzoj2049-洞穴勘测(动态树lct模板题)

    Description 辉辉热衷于洞穴勘测.某天,他按照地图来到了一片被标记为JSZX的洞穴群地区.经过初步勘测,辉辉发现这片区域由n个洞穴(分别编号为1到n)以及若干通道组成,并且每条通道连接了恰好 ...

  7. Luogu 3690 LCT - 模板

    推荐几篇比较好的博客: FlashHu 的 讲解比较好 : 传送门 Candy 的 代码~ : 传送门 以及神犇Angel_Kitty的 学习笔记: 传送门 Code V 模板 #include< ...

  8. BZOJ 1180 / 2843 LCT模板题_双倍经验

    一大早上到机房想先拍一下模板,热热身. 结果....对照着染色敲的 LCT 竟然死活也调不过去(你说我抄都能抄错) 干脆自己重新敲了一遍,10min就敲完了....... 还是要相信自己 Code: ...

  9. BZOJ3282: Tree (LCT模板)

    Description 给定N个点以及每个点的权值,要你处理接下来的M个操作. 操作有4种.操作从0到3编号.点从1到N编号. 0:后接两个整数(x,y),代表询问从x到y的路径上的点的权值的xor和 ...

随机推荐

  1. materia官网地址

    https://materializecss.com/autocomplete.html

  2. js中被调用的函数获取调用者对象

    通过event.srcElement即可.一直用了很久的传参,终于解决了.

  3. Vue filter-v-for 使用

    var app5 = new Vue({ el: '#app5', data: { shoppingList: [ "Milk", "Donuts", &quo ...

  4. 10.19JS日记

    1.函数   关键词(function) var是js的关键字,用于声明变量,声明在内存模块完成,定义(=)是在执行模块完成 var可以在内存模块提前完成(js代码执行前),所以有变量提升这个功能 c ...

  5. 10.8H5日记

    1.网页中去滚动条的属性 overflow:hidden: overflow-x:hidden:水平超出隐藏 2.z-index 层次叠加 元素重叠 谁的值大谁就在上边 当 当前元素有float和父级 ...

  6. 常用Date操作方法

    public class DateUtils {     /**    * 获取时间戳    * 输出结果:1438692801766    */   @Test   public void getT ...

  7. redis 数据类型为set命令整理以及示例

    数据类型为set.可以保证set内数据唯一.场景:生成订单号,因为要求订单号是绝对不能重复的,所以数据库中要设置为unique索引.但是其实可以通过redis,set来做每天的订单集合.比如A客户的订 ...

  8. hdu 4004 (二分加贪心) 青蛙过河

    题目传送门:http://acm.hdu.edu.cn/showproblem.php?pid=4004 题目意思是青蛙要过河,现在给你河的宽度,河中石头的个数(青蛙要从石头上跳过河,这些石头都是在垂 ...

  9. AngularJS 高级程序设计

    1.5.4 安装Web服务器 原来的: connect.static("../angularjs"); 报错.可以修改为: var connect = require('conne ...

  10. Tinyos学习笔记(三)

    读取Telosb内部传感器数据,并在计算机上显示. senseC.nc代码如下: #include "Timer.h" #include "sense.h" # ...