BZOJ2002弹飞绵羊
动态树LCT模板题
#include<cstdio>
#include<cctype>
#include<algorithm>
using namespace std;
inline int read()
{
int x = 0, flag = 1;
char c;
while(! isgraph(c = getchar()))
if(c == '-')
flag *= - 1;
while(isgraph(c))
x = x * 10 + c - '0', c = getchar();
return x * flag;
}
inline void println(int x)
{
if(x < 0)
putchar('-');
if(x == 0)
putchar('0');
int top = 0, ans[10 + (1 << 4)];
while(x)
ans[top ++] = x % 10, x /= 10;
for(; top; top --)
putchar(ans[top - 1] + '0');
putchar('\n');
}
const int MAXN = (int)2e5 + (1 << 5);
struct node
{
int isroot, ch[2], fa, size;
}T[MAXN];
void update(int u)
{
T[u].size = ((T[u].ch[0] == - 1) ? 0 : T[T[u].ch[0]].size)
+ ((T[u].ch[1] == - 1) ? 0 : T[T[u].ch[1]].size) + 1;
}
inline int get_rela(int u)
{
return u == T[T[u].fa].ch[1];
}
void rotate(int u)
{
int fa = T[u].fa, fafa = T[T[u].fa].fa, rela = get_rela(u);
T[T[u].ch[rela ^ 1]].fa = fa;
T[fa].ch[rela] = T[u].ch[rela ^ 1];
T[u].ch[rela ^ 1] = fa;
T[fa].fa = u;
T[u].fa = fafa;
if(T[fa].isroot)
T[fa].isroot = 0, T[u].isroot = 1;
else
T[fafa].ch[T[fafa].ch[1] == fa] = u;
update(fa), update(u);
}
void splay(int u)
{
while(1)
{
if(T[u].isroot)
break;
if(! T[T[u].fa].isroot)
rotate((get_rela(u) == get_rela(T[u].fa)) ? T[u].fa : u);
rotate(u);
}
}
void access(int u)
{
splay(u);
while(T[u].fa != - 1)
{
int fa = T[u].fa;
splay(fa);
if(T[fa].ch[1] != - 1)
T[T[fa].ch[1]].isroot = 1;
T[u].isroot = 0;
T[fa].ch[1] = u;
update(fa);
splay(u);
}
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("BZOJ2002.in", "r", stdin);
freopen("BZOJ2002.out", "w", stdout);
#endif
int n = read();
T[n].fa = - 1;
for(int i = 0; i < n; i ++)
T[i].fa = min(read() + i, n);
for(int i = 0; i <= n; i ++)
T[i].size = 1, T[i].isroot = 1, T[i].ch[0] = T[i].ch[1] = - 1;
int m = read();
for(int i = 0; i < m; i ++)
{
int opt = read();
if(opt == 1)
{
int u = read();
access(u);
println(T[T[u].ch[0]].size); //这里要稍微注意一下
continue;
}
int u = read();
splay(u);
T[T[u].ch[0]].fa = T[u].fa;
T[T[u].ch[0]].isroot = 1;
T[u].ch[0] = - 1;
T[u].size = ((T[u].ch[1] == - 1) ? 0 : T[T[u].ch[1]].size) + 1;
T[u].fa = min(n, read() + u);
}
}
BZOJ2002弹飞绵羊的更多相关文章
- BZOJ-2002 弹飞绵羊 Link-Cut-Tree (分块)
2002: [Hnoi2010]Bounce 弹飞绵羊 Time Limit: 10 Sec Memory Limit: 259 MB Submit: 6801 Solved: 3573 [Submi ...
- bzoj2002 弹飞绵羊
Description 某天,Lostmonkey发明了一种超级弹力装置,为了在他的绵羊朋友面前显摆,他邀请小绵羊一起玩个游戏.游戏一开始,Lostmonkey在地上沿着一条直线摆上n个装置,每个装置 ...
- [Link-Cut-Tree][BZOJ2002]弹飞绵羊
题面 Description 某天,Lostmonkey发明了一种超级弹力装置,为了在他的绵羊朋友面前显摆,他邀请小绵羊一起玩个游戏.游戏一开始,Lostmonkey在地上沿着一条直线摆上\(n\)个 ...
- bzoj2002 弹飞绵羊 lct版
这道题就是维护一个有根的lct 一开始建树全部建虚边 求多少次弹出就是求他到根的距离(根为n+1) 这里有个小技巧 将n+1作为根而没有虚根操作起来会比较方便 #include<cstdio&g ...
- bzoj2002 弹飞绵羊 分块
这道题是分块的初尝试 讲给定的区间n进行分块处理 这个每次修改的复杂的只有logn 很方便 代码是学黄学长的 http://hzwer.com/3505.html 当然里面还是有一定我自己的想法在里面 ...
- BZOJ 2002: [Hnoi2010]Bounce 弹飞绵羊 (动态树LCT)
2002: [Hnoi2010]Bounce 弹飞绵羊 Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 2843 Solved: 1519[Submi ...
- 【bzoj2002】[Hnoi2010]Bounce 弹飞绵羊 分块
[bzoj2002][Hnoi2010]Bounce 弹飞绵羊 2014年7月30日8101 Description 某天,Lostmonkey发明了一种超级弹力装置,为了在他的绵羊朋友面前显摆,他邀 ...
- 【BZOJ2002】弹飞绵羊(Link-Cut Tree)
[BZOJ2002]弹飞绵羊(Link-Cut Tree) 题面 题目描述 某天,Lostmonkey发明了一种超级弹力装置,为了在他的绵羊朋友面前显摆,他邀请小绵羊一起玩个游戏.游戏一开始,Lost ...
- 【BZOJ2002】 [Hnoi2010]Bounce 弹飞绵羊
BZOJ2002 [Hnoi2010]Bounce 弹飞绵羊 Solution 很早以前写的一道分块题,最近在搞LCT,又做了一遍. 1.LCT做法 看到这种动态修改,想下LCT怎么维护. 修改操作就 ...
随机推荐
- jquery中arrt()和prop()的区别
在jQuery中,attr()函数和prop()函数都用于设置或获取指定的属性,它们的参数和用法也几乎完全相同. 但不得不说的是,这两个函数的用处却并不相同.下面我们来详细介绍这两个函数之间的区别. ...
- nrf528xx bootloader 模块介绍(转载)
转载https://www.cnblogs.com/rfnets/p/8205521.html 1. bootloader 的基本功能: 启动应用 几个应用之间切换 初始化外设 nordic nrf5 ...
- Memcached配置失误引发的Keystone token丢失的问题
故障现象 近期公司的OpenStack上频繁出现虚拟机创建失败的情况,查看日志定位到问题出在neutron-server向keystone认证token失败. 故障原因 Keystone所使用的Mem ...
- selenuim2模拟鼠标键盘操作
有时候有些元素不便点击或者做其他的操作,这个时候可以借助selenium提供的Actions类,它可以模拟鼠标和键盘的一些操作,比如点击鼠标右键,左键,移动鼠标等操作.对于这些操作,使用perform ...
- CSS(非布局样式)
CSS(非布局样式) 问题1.CSS样式(选择器)的优先级 1.计算权重 2.!important 3.内联样式比外嵌样式高 4.后写的优先级高 问题2.雪碧图的作用 1.减少 HTTP 请求数,提高 ...
- 评估后Vista时代系统内核模式安全性
Windows Vista与之前的MS Windows版本(包括WindowsXPSP2)相比增加了很多的安全性.Vista新安全性的特征可以包括以下几个方面: 驱动签名 路径保护 内核模式代码完整性 ...
- bootstrap 弹出框(Popover)插件 修改title等属性选项值
<button type="button" class="btn btn-default ht-btn" data-toggle="popove ...
- luogu3808 luogu3796 AC自动机(简单版) AC自动机(加强版)
纪念一下我一晚上写了八遍AC自动机 这是加强版的: #include <iostream> #include <cstring> #include <cstdio> ...
- html 标签附加文本属性
<!DOCTYPE html> <html> <head> <script> function showDetails(animal) { var an ...
- 【bzoj3251】树上三角形 朴素LCA+暴力
题目描述 给定一大小为n的有点权树,每次询问一对点(u,v),问是否能在u到v的简单路径上取三个点权,以这三个权值为边长构成一个三角形.同时还支持单点修改. 输入 第一行两个整数n.q表示树的点数和操 ...