数据结构(块状链表):COGS 1689. [HNOI2010]Bounce 弹飞绵羊
时间限制:1 s
内存限制:259 MB
【题目描述】
某天,Lostmonkey发明了一种超级弹力装置,为了在他的绵羊朋友面前显摆,他邀请小绵羊一起玩个游戏。游戏一开始,Lostmonkey在地上沿
着一条直线摆上n个装置,每个装置设定初始弹力系数ki,当绵羊达到第i个装置时,它会往后弹ki步,达到第i+ki个装置,若不存在第i+ki个装置,
则绵羊被弹飞。绵羊想知道当它从第i个装置起步时,被弹几次后会被弹飞。为了使得游戏更有趣,Lostmonkey可以修改某个弹力装置的弹力系数,任何
时候弹力系数均为正整数。
【输入格式】
第一行包含一个整数n,表示地上有n个装置,装置的编号从0到n-1,接下来一行有n个正整数,依次为那n个装置的初始弹力系数。第三行有一个正整数m,
接下来m行每行至少有两个数i、j,若i=1,你要输出从j出发被弹几次后被弹飞,若i=2则还会再输入一个正整数k,表示第j个弹力装置的系数被修改成
k。对于10%的数据n,m<=10000,对于100%的数据n<=200000,m<=100000
【输出格式】
对于每个i=1的情况,你都要输出一个需要的步数,占一行。
【样例输入】
4
1 2 1 1
3
1 1
2 1 1
1 1
【样例输出】
2
3
由于修改操作很多,可以将复杂度摊给询问操作。
#include <iostream>
#include <cstring>
#include <cstdio>
#include <cmath>
using namespace std;
const int maxn=;
int a[maxn],bel[maxn],sum[maxn],to[maxn];
int n,m,K,Q;
int Query(int x){
int ret=;
while(x!=-){
ret+=sum[x];
x=to[x];
}
return ret;
}
int main(){
freopen("bzoj_2002.in","r",stdin);
freopen("bzoj_2002.out","w",stdout);
scanf("%d",&n);
m=sqrt(n+0.5);
for(int i=;i<=n;i++){
if((i-)%m==)K++;
bel[i]=K;
scanf("%d",&a[i]);
}
for(int i=n;i>=;i--){
if(i+a[i]>n){
to[i]=-;
sum[i]=;
}
else{
if(bel[i]==bel[i+a[i]]){
to[i]=to[i+a[i]];
sum[i]=sum[i+a[i]]+;
}
else{
to[i]=i+a[i];
sum[i]=;
}
}
}
scanf("%d",&Q);
while(Q--){
int op,x,y;
scanf("%d",&op);
if(op==){
scanf("%d",&x);x++;
printf("%d\n",Query(x));
}
else{
scanf("%d%d",&x,&y);x++;
a[x]=y;
if(x+y>n){
sum[x]=;
to[x]=-;
}
else{
if(bel[x]==bel[x+y]){
to[x]=to[x+y];
sum[x]=sum[x+y]+;
}
else{
to[x]=x+y;
sum[x]=;
}
}
for(int p=x-;bel[p]==bel[x];p--)
if(bel[p]==bel[p+a[p]])
sum[p]=sum[p+a[p]]+,to[p]=to[p+a[p]];
}
}
return ;
}
数据结构(块状链表):COGS 1689. [HNOI2010]Bounce 弹飞绵羊的更多相关文章
- COGS.1689.[HNOI2010]Bounce 弹飞绵羊(分块)
题目链接 /* 分块,维护从某位置跳到下一个块需要多少步 */ #include<cmath> #include<cstdio> #include<cctype> ...
- BZOJ 2002: [Hnoi2010]Bounce 弹飞绵羊
2002: [Hnoi2010]Bounce 弹飞绵羊 Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 9071 Solved: 4652[Submi ...
- 【bzoj2002】[Hnoi2010]Bounce 弹飞绵羊 link-cut-tree
2016-05-30 11:51:59 用一个next数组,记录点x的下一个点是哪个 查询时,moveroot(n+1),access(x),splay(x) ,输出size[ch[x][0]]即为答 ...
- 【bzoj2002】[Hnoi2010]Bounce 弹飞绵羊 分块
[bzoj2002][Hnoi2010]Bounce 弹飞绵羊 2014年7月30日8101 Description 某天,Lostmonkey发明了一种超级弹力装置,为了在他的绵羊朋友面前显摆,他邀 ...
- BZOJ 2002: [Hnoi2010]Bounce 弹飞绵羊 分块
2002: [Hnoi2010]Bounce 弹飞绵羊 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOn ...
- BZOJ 2002: [Hnoi2010]Bounce 弹飞绵羊 LCT
2002: [Hnoi2010]Bounce 弹飞绵羊 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOn ...
- bzoj 2002: [Hnoi2010]Bounce 弹飞绵羊 動態樹
2002: [Hnoi2010]Bounce 弹飞绵羊 Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 4055 Solved: 2172[Submi ...
- bzoj 2002 : [Hnoi2010]Bounce 弹飞绵羊 (LCT)
链接:https://www.lydsy.com/JudgeOnline/problem.php?id=2002 题面: 2002: [Hnoi2010]Bounce 弹飞绵羊 Time Limit: ...
- 【BZOJ2002】 [Hnoi2010]Bounce 弹飞绵羊
BZOJ2002 [Hnoi2010]Bounce 弹飞绵羊 Solution 很早以前写的一道分块题,最近在搞LCT,又做了一遍. 1.LCT做法 看到这种动态修改,想下LCT怎么维护. 修改操作就 ...
随机推荐
- iOS Sqlite3 Demo 及 FMDB Demo
本文是主要实现了三个函数: testSQLite3 是测试系统自带的sqlite3的demo testFMDB是测试FMDB存取简单的数据类型的 的demo testFMDB2是将任意对象作为一个整体 ...
- ZOJ 3903 Ant(公式推导)
这个公式推导过程是看的这位大牛的http://blog.csdn.net/bigbigship/article/details/49123643 扩展欧几里德求模的逆元方法: #include < ...
- node基础再现--module.exports 和exports
实际上,最最基础的方法,最最原始的方法是module.exports,至于exports,是为了方便书写才出来的,应该说,module.exports 包含exports,所工作的范围更加的广泛! m ...
- eclipse代码注释的设置
http://blog.csdn.net/shiyuezhong/article/details/8450578 1. eclipse用户名的设置: 在eclipse的安装路径下,打开eclipse. ...
- oracle备份表
oracle与sql单表备份的区别 ( oracle中备份表: create table 备份表名 as select * from 原表 sql server中备份表: select * i ...
- framework not found -fno-arc编译错误
由于我是刚接手的代码 然后我拿来运行根本就是运行不了的 然后需要在linker 那边删除点东西就可以了. 把下边的两个删除就可以了 关于other linker flags 的介绍 请参考http ...
- iOS6以后的单个控制器横竖屏显示以及旋转屏控制技巧,附带iOS8以后显示电池状态栏
一.在应用中从竖屏模式强制转换为横屏模式 第一种方法:通过模态弹出视图的方式,使得特定ViewController坚持特定的interfaceOrientation(1)iOS6之后提供了这样一个方法 ...
- WebService开发步骤
WebService原理什么的百度很多我就说了,无非就是提供一个接口放在服务端,客户端实现这个接口就可以拿到自己需要的东西. 现在简单说一下用myEclipse来实现服务端和客户端.另一种WebSer ...
- 明解C语言,练习13-3,从文件中读入个人信息,按身高排序后显示
#include <stdio.h> #define NUMBER 6 #define F_PATH "D:\\C_C++\\ec13-3\\hw.dat" typed ...
- xubuntu14.04截图,彻底到Linux一个半月后记
前言 自学计算机技术,越到后面,越依赖ubuntu,以致于很多时候都是一开机就打开虚拟机上的ubuntu10.04,Linux已经变得越来越重要了. 2014-04-17,ubuntu14.0 ...