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 ...
随机推荐
- STM8上电默认电平不对的解决
首先,手册上说的是对的,STM8/32上电后所有未被初始化的引脚电平全部是浮空的.但是我的程序却出现了一个奇怪的现象 void main(void){ init();//这里初始化时钟,IO ... ...
- parzen 窗的matlab实现
用一下程序简单实现使用parzen窗对正态分布的概率密度估计: (其中核函数选用高斯核) %run for parzen close all;clear all;clc; x=normrnd(0,1, ...
- C++ traits技法的一点理解
为了更好的理解traits技法.我们一步一步的深入.先从实际写代码的过程中我们遇到诸如下面伪码说起. template< typename T,typename B> void (T a, ...
- Github第三方登陆详细流程
一. 流程图 二.具体实现步骤 Ⅰ.创建OAuth App 我们首先需要创建一个OAuth App,根据下图的步骤点击即可 依次填写信息,然后点Register application 然后我们可以看 ...
- CCF_201312-4_有趣的数
dp题,dp[i][j]代表i位数,j状态的数量.其中,j 的状态表示值有6种. 0 1 2 √ j = 0 3 01 02 √ j = 1 03 12 13 23 √ j = 2 0 ...
- LeetCode 684. Redundant Connection 冗余连接(C++/Java)
题目: In this problem, a tree is an undirected graph that is connected and has no cycles. The given in ...
- [Effective Java 读书笔记] 第三章 对所有对象都通用的方法 第十---十一条
第十条 始终覆盖toString() toString的实现可以使类使用起来更加舒适,在执行println等方法时打印出定制信息. 一单实现了自己的toString,指定输出的固定格式,在方法的文档说 ...
- win 8.0.12
一.下载 下载页面http://dev.mysql.com/downloads/mysql/ 选择系统平台后,点击download(根据系统选择64或32位) 二.配置 1.下载成功后,解压安装包到要 ...
- space transport protocols
VSAT系统对TCP的改进 https://www.vsat-systems.com/broadband-satellite-internet/index.html TCP/IP over satel ...
- 搭建Samba服务器、多部门共享,互不干扰,超实用
案例二 实现不同的用户访问同一个共享目录具有不同的权限,便于管理和维护.基本上能满足一些企业用户的需求. 一. 需求 1. 某公司有3个大部门,分别为:人事行政部(HR).财务部(FM).技术支持部( ...