bzoj2002 弹飞绵羊
Description
某天,Lostmonkey发明了一种超级弹力装置,为了在他的绵羊朋友面前显摆,他邀请小绵羊一起玩个游戏。游戏一开始,Lostmonkey在地上沿着一条直线摆上n个装置,每个装置设定初始弹力系数ki,当绵羊达到第i个装置时,它会往后弹ki步,达到第i+ki个装置,若不存在第i+ki个装置,则绵羊被弹飞。绵羊想知道当它从第i个装置起步时,被弹几次后会被弹飞。为了使得游戏更有趣,Lostmonkey可以修改某个弹力装置的弹力系数,任何时候弹力系数均为正整数。
Input
第一行包含一个整数n,表示地上有n个装置,装置的编号从0到n-1,接下来一行有n个正整数,依次为那n个装置的初始弹力系数。第三行有一个正整数m,接下来m行每行至少有两个数i、j,若i=1,你要输出从j出发被弹几次后被弹飞,若i=2则还会再输入一个正整数k,表示第j个弹力装置的系数被修改成k。对于20%的数据n,m<=10000,对于100%的数据n<=200000,m<=100000
Output
对于每个i=1的情况,你都要输出一个需要的步数,占一行。
用块状树维护由跳跃一次后位置到跳跃前位置连边构成的有根树。
每操作O(n0.5)次重构整棵树
均摊时间复杂度O(n1.5)
#include<cstdio>
#include<cmath>
int n,m,rt;
int cs,cb,tt=,cb2;
int fa[],fw[],v[],dep[],top[];
int enx[],epv[],ew[],ep;
inline int min(int a,int b){
return a<b?a:b;
}
void addedge(int a,int b){
fa[b]=a;
ew[ep]=b;
enx[epv[ep]=epv[a]]=ep;
enx[ep]=a;
fw[b]=epv[a]=ep++;
}
void deledge(int a){
int x=fw[a],pv=epv[x];
epv[enx[pv]=enx[x]]=pv;
}
int getdep(int x){
int ans=-;
while(x){
ans+=dep[x];
x=fa[top[x]];
}
return ans;
}
void build(int w){
++cs;
if(cs<=cb)top[w]=top[fa[w]],dep[w]=dep[fa[w]]+;
else cs=,top[w]=w,dep[w]=;
for(int i=enx[w],u=ew[i];u=ew[i];i=enx[i])build(u);
}
int tp,tpn,dp;
void dfs(int w){
if(top[w]!=tp)return;
top[w]=tpn;
dep[w]=dp;
++dp;
for(int i=enx[w],u=ew[i];u=ew[i];i=enx[i])dfs(u);
--dp;
}
int main(){
scanf("%d",&n);
cb=sqrt(n);
cb2=cb*;
rt=n+;
for(int i=;i<=n;i++)scanf("%d",v+i);
for(int i=;i<=rt;i++)enx[i]=epv[i]=i;ep=rt+;
for(int i=;i<=n;i++)addedge(min(i+v[i],rt),i);
scanf("%d",&m);
cs=cb,build(rt);
while(m--){
int op,a,b;
scanf("%d",&op);
if(op==){
scanf("%d%d",&a,&b);++a;
v[a]=b;
deledge(a);
addedge(min(a+v[a],rt),a);
tp=top[a],tpn=a,dp=,dfs(a);
if(++tt>cb2)cs=cb,build(rt),tt=;
}else{
int vans;
scanf("%d",&a);++a;
printf("%d\n",vans=getdep(a));
}
}
return ;
}
bzoj2002 弹飞绵羊的更多相关文章
- BZOJ-2002 弹飞绵羊 Link-Cut-Tree (分块)
2002: [Hnoi2010]Bounce 弹飞绵羊 Time Limit: 10 Sec Memory Limit: 259 MB Submit: 6801 Solved: 3573 [Submi ...
- [Link-Cut-Tree][BZOJ2002]弹飞绵羊
题面 Description 某天,Lostmonkey发明了一种超级弹力装置,为了在他的绵羊朋友面前显摆,他邀请小绵羊一起玩个游戏.游戏一开始,Lostmonkey在地上沿着一条直线摆上\(n\)个 ...
- bzoj2002 弹飞绵羊 lct版
这道题就是维护一个有根的lct 一开始建树全部建虚边 求多少次弹出就是求他到根的距离(根为n+1) 这里有个小技巧 将n+1作为根而没有虚根操作起来会比较方便 #include<cstdio&g ...
- BZOJ2002弹飞绵羊
动态树LCT模板题 #include<cstdio> #include<cctype> #include<algorithm> using namespace st ...
- 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怎么维护. 修改操作就 ...
随机推荐
- 练习vue(用户管理)1
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- VS2013中的快捷键大全
Visual Studio 2013 是一个基本完整的开发工具集,它包括了整个软件生命周期中所需要的大部分工具,如UML工具.代码管控工具.集成开发环境(IDE)等等.VS 2013 中新增了很多提高 ...
- C++primer 练习4.31-4.35
Exercise 4.31: 编写程序从标准输入设备读入字符串,并把该串存放在字 符数组中.描述你的程序如何处理可变长的输入.提供比 你分配的数组长度长的字符串数据测试你的程序. string in_ ...
- WEB接口测试之Jmeter接口测试自动化 (二)
通过逐个录入的方式,好不容易将需要测试几十个接口的300多个测试用例录入sampler-http请求中,固定的测试环境跑起来也还 感觉良好.不料在新服务器环境中跑用例时,问题来了:修改参数维护脚本等成 ...
- tensorflow中屏蔽输出的log信息方法
tensorflow中可以通过配置环境变量 'TF_CPP_MIN_LOG_LEVEL' 的值,控制tensorflow是否屏蔽通知信息.警告.报错等输出信息. 使用方法: import os imp ...
- chapter02“良/恶性乳腺癌肿瘤预测”的问题
最近比较闲,是时候把自己以前看的资料整理一下了. LogisticRegression:由于在训练过程中考虑了所有的样本对参数的影响,因此不一定获得最佳的分类器,对比下一篇 svm只用支持向量来帮助决 ...
- unbtu使用笔记
安装fcitx输入法: sudo apt-get install fcitx-table-wbpy 再配置http://www.cnblogs.com/imsoft/p/4368550.html vi ...
- IDEA错误:Cannot start compilation: the output path is not specified for module "XXX".
错误是发生在从github上checkout自己的项目时.因为没有将配置文件一起上传,所以在运行java程序时有了这个报错: Cannot start compilation: the output ...
- js窗口拖动 模版
<!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>& ...
- SUST OJ 1671: 数字拼图
1671: 数字拼图 时间限制: 1 Sec 内存限制: 16 MB提交: 34 解决: 19[提交][状态][讨论版] 题目描述 拼图游戏即在任意一个N*N(N>1)的拼图中,会把一张完整 ...