Bounce 弹飞绵羊 HYSBZ - 2002 分块
//预处理出以这个点为起点并跳出这个块的次数和位置
//更新一个点的弹力系数可以只更新这个点以及这个块内之前的点
#include<stdio.h>
#include<algorithm>
#include<string.h>
#include<cmath>
#include<iostream>
using namespace std;
const int N=2e5+;
struct node
{
//ahead为从该点跳的距离
int ahead;
//step为跳到下一个块的所需步数
int step;
//Next为跳到的下一个块 跳出Next为0
int Next;
//pos为跳到下一个块的位置
int pos;
}p[N];
int temp;
int block[N];
int main()
{
int n,m,op;
scanf("%d",&n);
for(int i=; i<n; i++)
scanf("%d",&p[i].ahead);
temp=sqrt(n);
//分块
for(int i=; i<n; i++)
block[i]=i/temp+;
for(int i=n-; i>=; i--)
{
//如果在同一个块内
if(block[i+p[i].ahead]!=block[i])
{
p[i].Next=block[i+p[i].ahead];
p[i].pos=i+p[i].ahead;
p[i].step=;
}
else
{
p[i].Next=p[i+p[i].ahead].Next;
p[i].pos=p[i+p[i].ahead].pos;
p[i].step=p[i+p[i].ahead].step+;
}
}
scanf("%d",&m);
int x,y;
for(int cas=; cas<=m; ++cas)
{
scanf("%d",&op);
if(op==)
{
scanf("%d",&x);
int ans=;
//一个块一个块的跳
while(p[x].Next!=)
{
ans+=p[x].step;
x=p[x].pos;
}
ans+=p[x].step;
printf("%d\n",ans);
}
else if(op==)//更新
{
scanf("%d%d",&x,&y);
p[x].ahead=y;
//更新的话,只更新在同一块内的
int l=(block[x]-)*temp;
for(int i=x; i>=l; i--)
{
if(block[i+p[i].ahead]!=block[i])
{
p[i].Next=block[i+p[i].ahead];
p[i].pos=i+p[i].ahead;
p[i].step=;
}
else
{
p[i].Next=p[i+p[i].ahead].Next;
p[i].pos=p[i+p[i].ahead].pos;
p[i].step=p[i+p[i].ahead].step+;
}
}
}
}
return ;
}
Bounce 弹飞绵羊 HYSBZ - 2002 分块的更多相关文章
- BZOJ 2002: [Hnoi2010]Bounce 弹飞绵羊 分块
2002: [Hnoi2010]Bounce 弹飞绵羊 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOn ...
- BZOJ 2002:Bounce 弹飞绵羊(分块)
2002: [Hnoi2010]Bounce 弹飞绵羊 Time Limit: 10 Sec Memory Limit: 259 MB Submit: 14944 Solved: 7598 [Su ...
- BZOJ 2002 Bounce 弹飞绵羊 (分块或动态树)
2002: [Hnoi2010]Bounce 弹飞绵羊 Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 13768 Solved: 6989[Subm ...
- BZOJ 2002: [Hnoi2010]Bounce 弹飞绵羊 【分块】
任意门:https://www.lydsy.com/JudgeOnline/problem.php?id=2002 2002: [Hnoi2010]Bounce 弹飞绵羊 Time Limit: 10 ...
- BZOJ 2002 Bounce 弹飞绵羊 —— 分块算法
题目链接:https://vjudge.net/problem/HYSBZ-2002 2002: [Hnoi2010]Bounce 弹飞绵羊 Time Limit: 10 Sec Memory Li ...
- 2002: [Hnoi2010]Bounce 弹飞绵羊(分块)
2002: [Hnoi2010]Bounce 弹飞绵羊 时间限制: 10 Sec 内存限制: 259 MB 题目描述 某天,Lostmonkey发明了一种超级弹力装置,为了在他的绵羊朋友面前显摆,他 ...
- bzoj 2002 Bounce 弹飞绵羊(分块)
2002: [Hnoi2010]Bounce 弹飞绵羊 Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 11202 Solved: 5698[Subm ...
- bzoj 2002 : [Hnoi2010]Bounce 弹飞绵羊 (LCT)
链接:https://www.lydsy.com/JudgeOnline/problem.php?id=2002 题面: 2002: [Hnoi2010]Bounce 弹飞绵羊 Time Limit: ...
- 【BZOJ】2002: [Hnoi2010]Bounce 弹飞绵羊
2002: [Hnoi2010]Bounce 弹飞绵羊 Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 14802 Solved: 7507[Subm ...
随机推荐
- <状压DP>solution-HDU5691_Sitting in Line
Sitting in Line Problem Description 度度熊是他同时代中最伟大的数学家,一切数字都要听命于他.现在,又到了度度熊和他的数字仆人们玩排排坐游戏的时候了.游戏的规则十分简 ...
- 浅谈C语言的数据存储(一)
作者:冯老师,华清远见嵌入式学院讲师. 程序由指令和数据组成,C语言程序亦是如此.开发者在编写程序的时候往往需要根据不同数据的特点以及程序需求来选择不同的数据存储方式,那么在C语言中数据的存储分为哪些 ...
- Android 之采用execSQL和rawQuery方法完成数据的添删改查操作
使用 SQLiteDatabase 操作 SQLite 数据库 [java] view plaincopy /* Android提供了一个名为SQLiteDatabase的类,该类封装了一些操作数据库 ...
- 用TreeWalk提高网速及其在vista中的安装方法
本文中所需的软件请到http://download.csdn.net/source/738436下载. 有时候,我们发现可以上的去QQ,上的去飞信,但是却打不开网页,我通过GOOGLE的搜索发 ...
- Http POST 提交 415错误 Unsupported Media Type 解决方案
1 问题 在调用webapi post 提交时出现 415 Unsupported Media Type 错误 前端代码如下: $.post("/api/student/poststuden ...
- Codeforces_798
A.暴力把每个位置的字符改成另外25个字符,判断是否回文. #include<bits/stdc++.h> using namespace std; string s; int main( ...
- NJUPT_Wrj 个人训练实录
9暑假了,开个训练实录,记录自己每天的训练以及补题(仅含个人训练,组队训练另开坑)希望能坚持下去QAQ 7.5日常:BZOJ1607线性筛.1601MST.1602LCA.1606背包.1625背包比 ...
- 微信小程序中的图表构建
第一 html中的代码 <view class="container"> <canvas canvas-id="lineCanvas" bin ...
- MySQL关系型数据库基础操作
MySQL基础 一.MySQL常用数据类型 1.常用数值类型(INT,DOUBLE,FLOAT) ① int 或者 integer 类型: 大小(字节):4字节: 范围: (有符号: -2147483 ...
- eclipse里新建work set,将项目分组放在不同文件夹
想必大家的Eclipse里也会有这么多得工程...... 每次工作使用到的项目肯定不会太多...... 每次从这么大数量的工程当中找到自己要使用的, 必须大规模的滚动滚动条......有点不和谐了. ...