【BZOJ2002】弹飞绵羊

原创 2015年11月18日 19:35:56

第一道LCT,纪念一下~

#include<iostream>
#include<cstdio>
#define maxn 200000
using namespace std;
int n;
int ch[maxn+10][2],fa[maxn+10],sz[maxn+10];
int rc(int f,int o){return ch[f][1]==o;}
void pushup(int o){
    if(!o)return;
    sz[o]=sz[ch[o][0]]+sz[ch[o][1]]+1;
}
bool root(int o){return ch[fa[o]][0]!=o&&ch[fa[o]][1]!=o;}
void rotate(int o){
    int f=fa[o],r=rc(fa[o],o);
    if(!root(f))fa[ch[fa[f]][rc(fa[f],f)]=o]=fa[f];
    else fa[o]=fa[f];
    fa[ch[f][r]=ch[o][r^1]]=f;
    fa[ch[o][r^1]=f]=o;
    pushup(f);
    pushup(o);
}
void splay(int o){
    while(!root(o)){
        if(!root(fa[o])&&rc(fa[fa[o]],fa[o])==rc(fa[o],o))rotate(fa[o]);
        rotate(o);
    }
}
void access(int u){
    int v=0;
    while(u){
        splay(u);
        ch[u][1]=v;
        pushup(u);
        v=u;
        u=fa[u]; 
    }
}
void join(int v,int u){
    access(v);
    splay(v);
    fa[ch[v][0]]=0;
    ch[v][0]=0;
    fa[v]=u;
    access(v);
}
int main(){
    freopen("2002.in","r",stdin);
    scanf("%d",&n);
    for(int i=1;i<=n;i++){
        int a;
        scanf("%d",&a);
        fa[i]=min(n+1,i+a);
    }
    int m;
    scanf("%d",&m);
    while(m--){
        int k,u;
        scanf("%d%d",&k,&u);
        u++;
        if(k==1){
            access(u);
            splay(u);
            printf("%d\n",sz[u]-1);
        }else{
            int c;
            scanf("%d",&c);
            join(u,min(n+1,u+c));
        }
    }
    return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

bzoj2002 弹飞绵羊

分为sqrt(n)左右块,next[i]记录从i跳出当前块的位置,time[i]记录相应次数,up返回当前点所在块最大值,low返回最小值。提前把low、up存起来似乎更快。。。开始先把next、ti...
  • sdlyyxy
  • sdlyyxy
  • 2015年02月25日 20:18
  • 1037

【HNOI 2010】Bounce 弹飞绵羊 分块

BZOJ Description 某天,Lostmonkey发明了一种超级弹力装置,为了在他的绵羊朋友面前显摆,他邀请小绵羊一起玩个游戏。游戏一开始,Lostmonkey在地上沿着一条直线摆上n个...
  • Qantun_Mechanics
  • Qantun_Mechanics
  • 2016年09月30日 17:22
  • 1261

Duang,Duang,H5 +酷炫效果+干货,此时不收更待何时

现在市面上有一大批H5页面模板制作工具,诚然,他们方便了很多非专业设计师设计制作H5页面。但是,很多模板工具上的作品大部分还停留在左飞入右飞出的初级境界,看多了真心有些腻,动效如无美感还不如看静态的。...
  • qq_20913021
  • qq_20913021
  • 2016年04月18日 17:29
  • 4227

BZOJ[2002]弹飞绵羊 分块

传送门ber~ 不会写LCT-。-,分块水过 记录多少次能跳出自己的块,和跳到的点是哪个 修改时更改本块x之前的部分 统计时模拟一遍就可以了 LCT题解可以看这个人 代码如下: #inc...
  • WADuan2
  • WADuan2
  • 2018年01月12日 08:06
  • 73

【BZOJ2002】【HNOI2010】弹飞绵羊(LCT)

Description click me Solution 根据从每个点所能跳到的点连边,若被弹出,则连到一个新建节点n+1n+1,对于弹力系数的更改用LCT实现,每次询问时使该节点成为根,...
  • hhaannyyii
  • hhaannyyii
  • 2017年12月31日 17:46
  • 24

bzoj 2002 弹飞绵羊 分块 解题报告

他邀请小绵羊一起玩个游戏。
  • Hawo11
  • Hawo11
  • 2017年07月20日 09:16
  • 164

【bzoj 2002】 Bounce 弹飞绵羊 题解&代码

分块
  • DERITt
  • DERITt
  • 2016年03月14日 21:10
  • 333

[bzoj2002]弹飞绵羊

题目大意有N个点,每个点有一个系数a[i],你处于位置i可以走到i+a[i],若i+a[i]>n则你走出了地图。现M个操作有两种:1、把a[j]修改为k。2、询问你位于点j时,需要走多少部走出地图。n...
  • WerKeyTom_FTD
  • WerKeyTom_FTD
  • 2016年01月17日 14:46
  • 393

动态树-LCT-bzoj2002弹飞绵羊

我的第一篇博客给LCT(Link-Cut Tree)^_动态树要求我们维护一个由若干棵子结点无序的有根树组成的森林。 要求这个数据结构支持对树的分割,合并,对某个点到它的根的路径的某些操作, 以及对某...
  • Frods
  • Frods
  • 2016年08月18日 19:44
  • 689

BZOJ2002弹飞绵羊

2002: [Hnoi2010]Bounce 弹飞绵羊 Time Limit: 10 Sec Memory Limit: 259 MB Submit: 6908 Solved: 3621 D...
  • DCrusher
  • DCrusher
  • 2016年03月24日 08:14
  • 163
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【BZOJ2002】弹飞绵羊
举报原因:
原因补充:

(最多只允许输入30个字)