实际上就是动态树的模版加上一个维护每一条链的size这样就可以吧一次弹射看成一条路径,然后统计这个路径上的size实际上就是经过了多少个节点然后没什么了。。

#include <bits/stdc++.h>
using namespace std;
const int MAXN = 200000;
int ch[MAXN+10][2], Fa[MAXN+10];
int que[MAXN+10], sz[MAXN+10];
bool rev[MAXN+10];
bool isroot(int u){return ch[Fa[u]][0] != u && ch[Fa[u]][1] != u;}
void Rotate(int u){int x = Fa[u], y = Fa[x];bool md = ch[x][1] == u;Fa[u] = y;if(!isroot(x)) ch[y][ch[y][1] == x] = u;ch[x][md] = ch[u][!md]; Fa[ch[u][!md]] = x;ch[u][!md] = x; Fa[x] = u;sz[x] = sz[ch[x][0]] + sz[ch[x][1]] + 1;
}
void push_down(int u){if(rev[u]){rev[u] ^= 1; rev[ch[u][0]] ^= 1; rev[ch[u][1]] ^= 1;swap(ch[u][0], ch[u][1]);}
}
void Splay(int u){int now = u;que[0] = 1; que[1] = now;while(!isroot(now)){que[++que[0]] = Fa[now];now = Fa[now];}for(;que[0];que[0]--) push_down(que[que[0]]);while(!isroot(u)){int x = Fa[u], y = Fa[x];if(!isroot(x)){if((ch[x][0] == u) ^ (ch[y][0] == x)) Rotate(u);else Rotate(x);}Rotate(u);}sz[u] = sz[ch[u][0]] + sz[ch[u][1]] + 1;
}
void access(int u){int up = 0;while(u != 0){Splay(u);ch[u][1] = up;up = u; u = Fa[u];}
}
void root(int u){access(u);Splay(u);rev[u] ^= 1;
}
void Link(int x, int y){root(x);Fa[x] = y;Splay(x);
}
void Cut(int x, int y){root(x);access(y);Splay(y);ch[y][0] = Fa[x] = 0;
}
/*bool Query(int x, int y){access(x); Splay(x);int u = x;while(ch[u][0]) u = ch[u][0];access(y); Splay(y);int u1 = y;while(ch[u1][0]) u1 = ch[u1][0];return u == u1;
}*/
int Jp[MAXN+10];
int main(){int n, m, a, b;scanf("%d", &n);for(int i=1;i<=n;i++){scanf("%d", &a);Jp[i] = min(i+a, n+1);Link(Jp[i], i);}int ord;scanf("%d", &m);for(int i=0;i<m;i++){scanf("%d", &ord);if(ord == 1){scanf("%d", &a);root(n+1);access(a+1);Splay(a+1);printf("%d\n", sz[ch[a+1][0]]);}else{scanf("%d %d", &a, &b);Cut(a+1, Jp[a+1]);Jp[a+1] = a + 1 + b;if(a + b + 1 > n) Jp[a+1] = n+1;Link(Jp[a+1], a+1);}}return 0;
}

转载于:https://www.cnblogs.com/JeremyGJY/p/5921737.html

【动态树】[BZOJ2002] Bounce 弹飞绵羊相关推荐

  1. 2002: [Hnoi2010]Bounce 弹飞绵羊

    2002: [Hnoi2010]Bounce 弹飞绵羊 https://www.lydsy.com/JudgeOnline/problem.php?id=2002 分析: 绵羊在弹飞的路径中相当于一棵 ...

  2. AC日记——[HNOI2010]BOUNCE 弹飞绵羊 洛谷 P3203

    [HNOI2010]BOUNCE 弹飞绵羊 思路: SBlct: 代码: #include <bits/stdc++.h> using namespace std; #define max ...

  3. bzoj 2002: [Hnoi2010]Bounce 弹飞绵羊(分块)

    2002: [Hnoi2010]Bounce 弹飞绵羊 Time Limit: 10 Sec  Memory Limit: 259 MB Submit: 10761  Solved: 5542 [Su ...

  4. HYSBZ - 2002 :Bounce 弹飞绵羊 (分块算法)

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

  5. bzoj 2002 Bounce 弹飞绵羊

    2002: [Hnoi2010]Bounce 弹飞绵羊 时间限制: 10 Sec   内存限制: 259 MB 提交: 16133   解决: 8253 题目描述 某天,Lostmonkey发明了一种 ...

  6. BZOJ 2002 Bounce 弹飞绵羊 [Hnoi2010]

    弹飞绵羊 题目的网址为: http://www.lydsy.com/JudgeOnline/problem.php?id=2002 题目大意 有N个点,每个点有一个系数a[i],你处于位置i可以走到i ...

  7. Bounce 弹飞绵羊

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

  8. BZOJ2002: [Hnoi2010]Bounce 弹飞绵羊(LCT)

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

  9. [HNOI 2010]Bounce 弹飞绵羊

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

最新文章

  1. 拆解交易系统--服务高可用
  2. 关于python中requests模块导入问题-python中requests模块的使用方法
  3. Hdoj Minimize The Difference
  4. 解决外部工具链接CRM失败的问题
  5. 计算机与外部设备通讯的接口,总线接口与计算机通信(四)USB外部总线(初级认识)...
  6. SAP Spartacus名为Configuration的injection token
  7. advanced installer更换程序id_好程序员web前端培训分享kbone高级-事件系统
  8. Java反射机制获取系统@Hide属性
  9. 函数指针实现无类型打印
  10. Radon变换——MATLAB
  11. python接口在哪里_在Python中实现接口?
  12. 微信小程序怎么做店铺?
  13. AtCoder Beginner Contest 061(CD)
  14. iphone个系列尺寸_10年巨变:华为手机是如何赶超iPhone的
  15. 如何查看计算机关机事件,深度技术win7系统如何查看电脑的开关机时间【图文】...
  16. OpenCV入门系列 —— boxFilter盒子滤波
  17. Context-Aware Zero-Shot Recognition 论文翻译
  18. shared_ptr的引用计数原理
  19. java 多线程的三种写法
  20. STM32——中断优先级分组

热门文章

  1. 电子工程师必须知道的10个网站 !!!
  2. python 试题归纳及答疑 更新中.....
  3. Python初探——sklearn库中数据预处理函数fit_transform()和transform()的区别
  4. python学习日记-2
  5. JQuery:DOM操作
  6. 使用python处理子域名爆破工具subdomainsbrute结果txt
  7. IBatis手动刷新缓存
  8. POJ 2488 A Knight's Journey (棋盘DFS)
  9. [转]汇编语言的准备知识--给初次接触汇编者 2
  10. sigprocmask理解