1. #include<iostream>
  2. #include<cstring>
  3. #include<cstdio>
  4. #include<cmath>
  5. #include<algorithm>
  6. using namespace std;
  7. const int maxn=;
  8. struct node{
  9. int ls,rs,fa,is_root;
  10. }tr[maxn];
  11. int n,m,siz[maxn],k[maxn];
  12. void update(int x){
  13. siz[x]=;
  14. if(tr[x].ls)siz[x]+=siz[tr[x].ls];
  15. if(tr[x].rs)siz[x]+=siz[tr[x].rs];
  16. }
  17. void rx(int x){
  18. int y=tr[x].fa,z=tr[y].fa;
  19. tr[y].ls=tr[x].rs;
  20. if(tr[x].rs)tr[tr[x].rs].fa=y;
  21. tr[x].rs=y;tr[y].fa=x;
  22. tr[x].fa=z;
  23. if(z&&!tr[y].is_root){//注意这句判断,辅助树之间的边是单向的;
  24. if(tr[z].ls==y)tr[z].ls=x;else tr[z].rs=x;
  25. }
  26. if(tr[y].is_root)tr[x].is_root=,tr[y].is_root=;
  27. update(y);update(x);
  28. }
  29. void lx(int x){
  30. int y=tr[x].fa,z=tr[y].fa;
  31. tr[y].rs=tr[x].ls;
  32. if(tr[x].ls)tr[tr[x].ls].fa=y;
  33. tr[x].ls=y;tr[y].fa=x;
  34. tr[x].fa=z;
  35. if(z&&!tr[y].is_root){
  36. if(tr[z].ls==y)tr[z].ls=x;else tr[z].rs=x;
  37. }
  38. if(tr[y].is_root)tr[x].is_root=,tr[y].is_root=;
  39. update(y);update(x);
  40. }
  41. void splay(int x){
  42. while(!tr[x].is_root){
  43. int y=tr[x].fa,z=tr[y].fa;
  44. if(tr[y].is_root){if(tr[y].ls==x)rx(x);else lx(x);}
  45. else{
  46. if(tr[z].ls==y&&tr[y].ls==x){rx(y);rx(x);}
  47. else if(tr[z].ls==y&&tr[y].rs==x){lx(x);rx(x);}
  48. else if(tr[z].rs==y&&tr[y].ls==x){rx(x);lx(x);}
  49. else{lx(y);lx(x);}
  50. }
  51. }
  52. }
  53. void ace(int x){
  54. int y=;
  55. do{
  56. splay(x);
  57. tr[tr[x].rs].is_root=;
  58. tr[tr[x].rs=y].is_root=;
  59. update(x);
  60. x=tr[y=x].fa;
  61. }while(x);
  62. }
  63. void link(int u,int v){//虽然说是link,但也包含和原来的断开然后和新的连上的两个过程
  64. if(v>n)v=;
  65. ace(u);splay(u);
  66. tr[tr[u].ls].is_root=;
  67. tr[tr[u].ls].fa=;tr[u].ls=;
  68. tr[u].fa=v;update(u);
  69. }
  70. int query(int x){
  71. ace(x);splay(x);
  72. return siz[tr[x].ls]+;
  73. }
  74. int main(){
  75. scanf("%d",&n);
  76. for(int i=;i<=n;++i){
  77. tr[i].is_root=siz[i]=;
  78. tr[i].fa=tr[i].ls=tr[i].rs=;
  79. }
  80. for(int i=;i<=n;++i){
  81. scanf("%d",&k[i]);
  82. link(i,i+k[i]);
  83. }
  84. scanf("%d",&m);
  85. int op,pos,cha;
  86. for(int i=;i<=m;++i){
  87. scanf("%d%d",&op,&pos);
  88. if(op==)printf("%d\n",query(pos+));
  89. else{
  90. scanf("%d",&cha);
  91. link(pos+,pos+cha+);
  92. }
  93. }
  94. //system("pause");
  95. return ;
  96. }

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. maven工程的拆分与聚合

    1.创建父工程: 首先创建maven Project: 点击next,进入下一个页面,勾选上create a simple project: 点击next,进入下一页面,在这里与创建普通maven工程 ...

  2. linux C程序中获取shell脚本输出(如获取system命令输出)

    转载自 http://blog.csdn.net/hjxhjh/article/details/7909518 1. 前言 Unix 界有一句名言:“一行shell脚本胜过万行C程序”,虽然这句话有些 ...

  3. 小程序41028 form_id无效

    如果参数都没有问题的话,那么我的问题来了,你是发给用户自己么?如果不是,那就找到原因了,必须发给本人才可以...我淌过无数条坑,这个坑我服了...官方文档上写的不是很清楚

  4. 7.Mysql存储引擎

    7.表类型(存储引擎)的选择7.1 Mysql存储引擎概述 mysql支持插件式存储引擎,即存储引擎以插件形式存在于mysql库中. mysql支持的存储引擎包括:MyISAM.InnoDB.BDB. ...

  5. hdu 1757 (矩阵快速幂) 一个简单的问题 一个简单的开始

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1757 题意不难理解,当x小于10的时候,数列f(x)=x,当x大于等于10的时候f(x) = a0 * ...

  6. 简单选择排序(js版)

    简单选择排序 基本思想:通过n-i次关键字间的比较,从n-i+1个记录中选出关键字最小的记录,并和第i个记录交换.(废话不多说,先看代码). function SelectSort(arr){ var ...

  7. Jquery中的$.cookie()方法

    jquery.cookie中的操作: jquery.cookie.js是一个基于jquery的插件,点击下载! 创建一个会话cookie: $.cookie(‘cookieName’,'cookieV ...

  8. Vue单页面应用

    单页面应用指一个系统只加载一次资源,然后下面的操作交互.数据交互是通过router.ajax来进       行,页面并没有刷新:<1>在vue搭建的环境里面怎么有没有公用的css和js? ...

  9. java基本知识归集

    类中可以有几种东西:属性,方法,构造器,初始化块 new创建对象时, 1.类属性和类初始化块分配空间. 2.执行默认初始化 如有父类,先为父类执行父类自己的1和2步骤,再执行上面的1和2. 一个类执行 ...

  10. windows下忘记mysql的root密码

    1.停止mysql 2.命令行启动mysqlmysqld --defaults-file="c:\mysql\mysql server 5.1\my.ini" --console ...