bzoj 2002: [Hnoi2010]Bounce 弹飞绵羊(分块)
2002: [Hnoi2010]Bounce 弹飞绵羊
Time Limit: 10 Sec Memory Limit: 259 MB
Submit: 10761 Solved: 5542
[Submit][Status][Discuss]
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的情况,你都要输出一个需要的步数,占一行。
Sample Input
Sample Output
将弹簧分成√n块
对于每个弹簧记录①要弹多少次才能弹出他所在的那一块②在下一块的落点
这样查询修改就都是√n了
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<algorithm>
using namespace std;
int a[200005], t[200005], net[200005], bel[200005];
int main(void)
{int n, m, i, q, len, x, c, ans, k, L, R, p;while(scanf("%d", &n)!=EOF){for(i=1;i<=n;i++)scanf("%d", &a[i]);m = sqrt(1.0*n);len = n/m;for(i=n;i>=1;i--){bel[i] = min((i-1)/len+1, m);x = i+a[i];if(x>n || bel[x]!=bel[i])t[i] = 1, net[i] = x;elset[i] = t[x]+1, net[i] = net[x];}scanf("%d", &q);while(q--){scanf("%d", &c);if(c==1){ans = 0;scanf("%d", &x);x++;while(x<=n){ans += t[x];x = net[x];}printf("%d\n", ans);}else{scanf("%d%d", &x, &k);x++;L = (bel[x]-1)*len+1;R = bel[x]*len;if(bel[x]==m) R = n;for(i=R;i>=L;i--){if(x==i)a[i] = k;p = i+a[i];if(p>n || bel[p]!=bel[i])t[i] = 1, net[i] = p;elset[i] = t[p]+1, net[i] = net[p];}}}}return 0;
}
bzoj 2002: [Hnoi2010]Bounce 弹飞绵羊(分块)相关推荐
- [BZOJ 2002][Hnoi2010]Bounce 弹飞绵羊(分块)
Description 某天,Lostmonkey发明了一种超级弹力装置,为了在他的绵羊朋友面前显摆,他邀请小绵羊一起玩个游戏.游戏一开始,Lostmonkey在地上沿着一条直线摆上n个装置,每个装置 ...
- BZOJ 2002: [Hnoi2010]Bounce 弹飞绵羊
Description 某天,Lostmonkey发明了一种超级弹力装置,为了在他的绵羊朋友面前显摆,他邀请小绵羊一起玩个游戏.游戏一开始,Lostmonkey在地上沿着一条直线摆上n个装置,每个装置 ...
- 2002: [Hnoi2010]Bounce 弹飞绵羊
2002: [Hnoi2010]Bounce 弹飞绵羊 https://www.lydsy.com/JudgeOnline/problem.php?id=2002 分析: 绵羊在弹飞的路径中相当于一棵 ...
- AC日记——[HNOI2010]BOUNCE 弹飞绵羊 洛谷 P3203
[HNOI2010]BOUNCE 弹飞绵羊 思路: SBlct: 代码: #include <bits/stdc++.h> using namespace std; #define max ...
- HYSBZ - 2002 :Bounce 弹飞绵羊 (分块算法)
Bounce 弹飞绵羊 某天,Lostmonkey发明了一种超级弹力装置,为了在他的绵羊朋友面前显摆,他邀请小绵羊一起玩个游戏.游戏一开始,Lostmonkey在地上沿着一条直线摆上n个装置,每个装置 ...
- 【HNOI 2010】Bounce 弹飞绵羊 分块
BZOJ Description 某天,Lostmonkey发明了一种超级弹力装置,为了在他的绵羊朋友面前显摆,他邀请小绵羊一起玩个游戏.游戏一开始,Lostmonkey在地上沿着一条直线摆上n个装置 ...
- [HNOI2010]BOUNCE 弹飞绵羊
题目描述 某天,Lostmonkey发明了一种超级弹力装置,为了在他的绵羊朋友面前显摆,他邀请小绵羊一起玩个游戏.游戏一开始,Lostmonkey在地上沿着一条直线摆上n个装置,每个装置设定初始弹力系 ...
- BZOJ2002: [Hnoi2010]Bounce 弹飞绵羊(LCT)
Description 某天,Lostmonkey发明了一种超级弹力装置,为了在 他的绵羊朋友面前显摆,他邀请小绵羊一起玩个游戏.游戏一开始,Lostmonkey在地上沿着一条直线摆上n个装置,每个装 ...
- BZOJ 2002 Bounce 弹飞绵羊 [分块]
本身是一道lct裸题,为了证明分块的优越性,可用性,强行写了一波不擅长的分块...GG 分块思路很优秀,每个点记录跳出分块的步数以及跳到下一分块的哪个点 #include<cmath> # ...
最新文章
- java protobuf 例子_用Maven实现一个protobuf的Java例子
- numpy 拼接_数据分析-numpy的拼接与交换
- java代码=--数组复制
- Power BI for Office 365 概览
- 浅谈SQL Server中的快照
- postgres整库导入导出
- 使用IDEA回退SVN到某个历史版本
- 炳辉中学2021高考成绩查询,天长中学 炳辉中学 天长二中 关塘中学2019年高考成绩喜报...
- ZOJ 3332 (哈密顿路竞赛图)
- Excel四入五舍计算公式
- C语言程序设计-用英文单词模拟数学计算系统
- WPS如何并排放置两张图片_表格技巧—Excel如何截图
- 客户端性能自动化-亲自实践遇到的问题
- SQL Tuning Advisor 使用11G的自动调优建议
- 走进区块链 | 巴比特2020校招正式开启
- ​新手网赚要避的几个坑,你知道吗?
- oracle数据字典损坏恢复,PRM-DUL成功案例:恢复了700GB损坏严重的Oracle数据库
- mysql cloud ha_MySQL HA
- [书目20150727]有效沟通-余世维
- 搜狐云景客户端工具评测之WordPress的搭建
热门文章
- IBM语音识别系统实现错词率重大突破
- 科大讯飞新一代语音识别系统揭秘
- Vue 新手引导标签
- php7 错误处理,PHP7升级-异常错误处理
- 【深入理解JVM】引用,句柄,指针分别是什么?
- 新手小白python数据清洗代码_5天10分钟,学会数据清洗!(Python)
- 器件旋转45度_【速评3+1】第十一期:朱雨玲45,日版CL,Rakza Z,国变等
- layer 弹出框(iframe层)父子页面传值
- 2021 第十二届蓝桥杯大赛软件赛省赛(第二场),C/C++大学B组题解
- 【2021牛客暑期多校训练营6】H Hopping Rabbit(扫描线)