2002: [Hnoi2010]Bounce 弹飞绵羊

时间限制: 10 Sec   内存限制: 259 MB
提交: 16133   解决: 8253

题目描述

某天,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。对于20%的数据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
题解:分块。令 k[i]表示为弹力系数, next[i]表示为跳出 i 所在块时之后的坐标,jump[i]表示为跳出 i 所在块需要的次数。由于绵羊是由 i 跳到 i+ki ,所以需从后往前处理数组。
代码:
#include<bits/stdc++.h>
using namespace std;
const int maxn=200005;
int k[maxn],next[maxn],jump[maxn],block,n;
int main()
{int i,w,op,x,y,m,ans;scanf("%d",&n);block=sqrt(n);for(i=0;i<n;i++) scanf("%d",&k[i]);for(i=n-1;i>=0;i--){w=i+k[i];if(w>=n) next[i]=-1,jump[i]=1;else if(w>=(i/block+1)*block) next[i]=w,jump[i]=1;else next[i]=next[w],jump[i]=jump[w]+1;}scanf("%d",&m);while(m--){scanf("%d",&op);if(op==1){ans=0;scanf("%d",&x);for(;next[x]!=-1;x=next[x]) ans+=jump[x];ans+=jump[x];printf("%d\n",ans);}else{scanf("%d",&x);scanf("%d",&k[x]);for(y=x;y>=x/block*block;y--){w=y+k[y];if(w>=n) next[y]=-1,jump[y]=1;else if(w>=(y/block+1)*block) next[y]=w,jump[y]=1;else next[y]=next[w],jump[y]=jump[w]+1;}}}system("pause");return 0;
}

转载于:https://www.cnblogs.com/VividBinGo/p/11294791.html

bzoj 2002 Bounce 弹飞绵羊相关推荐

  1. BZOJ 2002 Bounce 弹飞绵羊 [Hnoi2010]

    弹飞绵羊 题目的网址为: http://www.lydsy.com/JudgeOnline/problem.php?id=2002 题目大意 有N个点,每个点有一个系数a[i],你处于位置i可以走到i ...

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

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

  3. 【bzoj 2002】弹飞绵羊

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

  4. BZOJ 2002 HNOI2010 弹飞绵羊 分块

    题目大意及LCT版本题解:见 http://blog.csdn.net/popoqqq/article/details/38849471 今天手滑用分块又重写了一遍这道题0.0 分块就是短啊 将弹簧分 ...

  5. bzoj 2002: [Hnoi2010]Bounce 弹飞绵羊(分块)

    2002: [Hnoi2010]Bounce 弹飞绵羊 Time Limit: 10 Sec  Memory Limit: 259 MB Submit: 10761  Solved: 5542 [Su ...

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

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

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

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

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

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

  9. Bounce 弹飞绵羊

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

最新文章

  1. 特征选择过滤法之方差选择、双样本t检验、方差分析、相关系数法、卡方检验、互信息法
  2. 机构:去年购房者平均年龄近30岁
  3. 通话过程中显示呼叫失败_电销行业如何破局?深海捷云呼叫中心协助企业通过挑战...
  4. 链表应用——多项式相加
  5. SAP C4C一个典型的客户Organization和employee的同步需求
  6. 翻译题(map使用)
  7. java实现远程系统控制_java实现电脑远程控制完整源代码
  8. MySQL之创建表以及数据库增删改操作
  9. MySQL 百万级数据,怎么做分页查询?
  10. nfc修改饭卡软件下载_手机nfc模拟门禁卡app-NFC卡模拟软件中文版下载安卓标准版-西西软件下载...
  11. @Scheduled定时器,每月1号执行
  12. 2022年最新谷歌商店上架_Google Play 上架全流程附图
  13. 明日之后android和ios,明日之后互通区有哪些 明日之后ios和安卓互通区一览
  14. 如何使用idea生成Doc文档
  15. Winfrom+Devexpress 之GridControl ConvertTo TileView 制作精美的卡片式看板
  16. 常见网络协议总结(五层自顶向下)
  17. A计划:基础架构软件创业之道分享实录
  18. AtCoder Beginner Contest 203(Sponsored by Panasonic) D.Pond(二分+二维前缀和)
  19. 实现nginx的https 功能报错:
  20. 听肖邦Chopin: Waltz No.19 in A minor, Op.Posth的美好

热门文章

  1. 使用 BigDecimal 的正确方式
  2. java字符串长度计算,论程序员成长的正确姿势
  3. 一位码农的人生自述(四十八)------相聚
  4. 让IIS高效运行的不传之秘
  5. 【前端框架学习】MVC与MVVM
  6. CA认证与节点保密通信系统的设计与实现
  7. 小程序反馈功能并回显(包括前后端)
  8. python urllib
  9. 动态规划法——多段图的最短路径
  10. 单因素设计一元定量资料差异性分析(一)-- 单组设计一元定量资料 t检验 与 符号秩和检验、配对设计一元定量资料 t检验 与 符号秩和检验