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

4
1 2 1 1
3
1 1
2 1 1
1 1

Sample Output

2
3

将弹簧分成√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 弹飞绵羊(分块)相关推荐

  1. [BZOJ 2002][Hnoi2010]Bounce 弹飞绵羊(分块)

    Description 某天,Lostmonkey发明了一种超级弹力装置,为了在他的绵羊朋友面前显摆,他邀请小绵羊一起玩个游戏.游戏一开始,Lostmonkey在地上沿着一条直线摆上n个装置,每个装置 ...

  2. BZOJ 2002: [Hnoi2010]Bounce 弹飞绵羊

    Description 某天,Lostmonkey发明了一种超级弹力装置,为了在他的绵羊朋友面前显摆,他邀请小绵羊一起玩个游戏.游戏一开始,Lostmonkey在地上沿着一条直线摆上n个装置,每个装置 ...

  3. 2002: [Hnoi2010]Bounce 弹飞绵羊

    2002: [Hnoi2010]Bounce 弹飞绵羊 https://www.lydsy.com/JudgeOnline/problem.php?id=2002 分析: 绵羊在弹飞的路径中相当于一棵 ...

  4. AC日记——[HNOI2010]BOUNCE 弹飞绵羊 洛谷 P3203

    [HNOI2010]BOUNCE 弹飞绵羊 思路: SBlct: 代码: #include <bits/stdc++.h> using namespace std; #define max ...

  5. HYSBZ - 2002 :Bounce 弹飞绵羊 (分块算法)

    Bounce 弹飞绵羊 某天,Lostmonkey发明了一种超级弹力装置,为了在他的绵羊朋友面前显摆,他邀请小绵羊一起玩个游戏.游戏一开始,Lostmonkey在地上沿着一条直线摆上n个装置,每个装置 ...

  6. 【HNOI 2010】Bounce 弹飞绵羊 分块

    BZOJ Description 某天,Lostmonkey发明了一种超级弹力装置,为了在他的绵羊朋友面前显摆,他邀请小绵羊一起玩个游戏.游戏一开始,Lostmonkey在地上沿着一条直线摆上n个装置 ...

  7. [HNOI2010]BOUNCE 弹飞绵羊

    题目描述 某天,Lostmonkey发明了一种超级弹力装置,为了在他的绵羊朋友面前显摆,他邀请小绵羊一起玩个游戏.游戏一开始,Lostmonkey在地上沿着一条直线摆上n个装置,每个装置设定初始弹力系 ...

  8. BZOJ2002: [Hnoi2010]Bounce 弹飞绵羊(LCT)

    Description 某天,Lostmonkey发明了一种超级弹力装置,为了在 他的绵羊朋友面前显摆,他邀请小绵羊一起玩个游戏.游戏一开始,Lostmonkey在地上沿着一条直线摆上n个装置,每个装 ...

  9. BZOJ 2002 Bounce 弹飞绵羊 [分块]

    本身是一道lct裸题,为了证明分块的优越性,可用性,强行写了一波不擅长的分块...GG 分块思路很优秀,每个点记录跳出分块的步数以及跳到下一分块的哪个点 #include<cmath> # ...

最新文章

  1. java protobuf 例子_用Maven实现一个protobuf的Java例子
  2. numpy 拼接_数据分析-numpy的拼接与交换
  3. java代码=--数组复制
  4. Power BI for Office 365 概览
  5. 浅谈SQL Server中的快照
  6. postgres整库导入导出
  7. 使用IDEA回退SVN到某个历史版本
  8. 炳辉中学2021高考成绩查询,天长中学 炳辉中学 天长二中 关塘中学2019年高考成绩喜报...
  9. ZOJ 3332 (哈密顿路竞赛图)
  10. Excel四入五舍计算公式
  11. C语言程序设计-用英文单词模拟数学计算系统
  12. WPS如何并排放置两张图片_表格技巧—Excel如何截图
  13. 客户端性能自动化-亲自实践遇到的问题
  14. SQL Tuning Advisor 使用11G的自动调优建议
  15. 走进区块链 | 巴比特2020校招正式开启
  16. ​新手网赚要避的几个坑,你知道吗?
  17. oracle数据字典损坏恢复,PRM-DUL成功案例:恢复了700GB损坏严重的Oracle数据库
  18. mysql cloud ha_MySQL HA
  19. [书目20150727]有效沟通-余世维
  20. 搜狐云景客户端工具评测之WordPress的搭建

热门文章

  1. IBM语音识别系统实现错词率重大突破
  2. 科大讯飞新一代语音识别系统揭秘
  3. Vue 新手引导标签
  4. php7 错误处理,PHP7升级-异常错误处理
  5. 【深入理解JVM】引用,句柄,指针分别是什么?
  6. 新手小白python数据清洗代码_5天10分钟,学会数据清洗!(Python)
  7. 器件旋转45度_【速评3+1】第十一期:朱雨玲45,日版CL,Rakza Z,国变等
  8. layer 弹出框(iframe层)父子页面传值
  9. 2021 第十二届蓝桥杯大赛软件赛省赛(第二场),C/C++大学B组题解
  10. 【2021牛客暑期多校训练营6】H Hopping Rabbit(扫描线)