题目

在地上沿着一条直线摆上 n n n个装置,每个装置设定初始弹力系数 k i ki ki,当绵羊达到第 i i i个装置时,它会往后弹 k i ki ki步,达到第 i + k i i+ki i+ki个装置,若不存在第 i + k i i+ki i+ki个装置,则绵羊被弹飞。绵羊想知道当它从第 i i i个装置起步时,被弹几次后会被弹飞。(带修改)


分析

首先正解是LCT(动态树LINK-CUT-TREE),但是问题是我太菜了,所以要用分块,设 f [ i ] f[i] f[i]为跳出块的步数, n x [ i ] nx[i] nx[i]为跳到块外的点,首先提前处理,对于询问跳着回答,块内修改


代码

#include <cstdio>
#include <cstring>
#include <cctype>
#include <cmath>
#define rr register
using namespace std;
int n,f[200001],nx[200001],pos[200001],l[200001],a[200001],bk;
inline signed iut(){rr int ans=0,f=1; rr char c=getchar();while (!isdigit(c)) f=(c=='-')?-f:f,c=getchar();while (isdigit(c)) ans=(ans<<3)+(ans<<1)+(c^48),c=getchar();return ans*f;
}
inline void print(int ans){if (ans>9) print(ans/10);putchar(ans%10+48);
}
inline signed ask(int x){rr int ans=0;while (x<=n) ans+=f[x],x=nx[x];return ans;
}
inline void update(int x,int w){for (rr int i=l[pos[x]+1]-1;i>=l[pos[x]];--i)if (i+a[i]>=l[pos[i]+1]) f[i]=1,nx[i]=i+a[i];else f[i]=f[i+a[i]]+1,nx[i]=nx[i+a[i]];
}
signed main(){n=iut(); bk=sqrt(n);for (rr int i=1;i<=n;++i) a[i]=iut();for (rr int i=1;i<=n/bk;++i) l[i]=(i-1)*bk+1; l[n/bk+1]=n+1;for (rr int i=1;i<=n/bk;++i)for (rr int j=l[i];j<l[i+1];++j) pos[j]=i;for (rr int i=n;i;--i)if (i+a[i]>=l[pos[i]+1]) f[i]=1,nx[i]=i+a[i];else f[i]=f[i+a[i]]+1,nx[i]=nx[i+a[i]];for (rr int m=iut();m;--m){rr int q=iut(),x=iut()+1;if (q&1) print(ask(x)),putchar(10);else update(x,a[x]=iut());}return 0;
}

#分块#洛谷 3203 弹飞绵羊相关推荐

  1. 洛谷-P3203 弹飞绵羊 分块

    题目 题目链接 题意 据说这道题要用一道叫做LCT的数据结构,然而我不会... 一排有n个弹簧装置,从第iii个可一往后跳k[i]" role="presentation" ...

  2. 洛谷P3203 弹飞绵羊

    题目背景 搞不懂为什么大家伙都叫 弹(dan)飞绵羊 这道题我是用来点亮洛谷试炼场的分块模板的- 当然使用分块做的啊! 然后L_Y_T想了想,就右转题解了- 然后发现题解的代码可读性极差 于是就了解思 ...

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

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

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

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

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

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

  6. Bounce 弹飞绵羊

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

  7. P3203 [HNOI2010]弹飞绵羊

    P3203 [HNOI2010]弹飞绵羊 题目描述 详见:P3203 [HNOI2010]弹飞绵羊 solution 这是一道LCT的裸题. 但是我并不想用LCT解决此题(In fact 是不会LCT ...

  8. 题解-弹飞绵羊 (HNOI2015)

    LCT 模板题,分块也很优秀. 分块做法 维护每个点到第一次跳到下一个块时的跳跃次数,并记录其跳到下一个块的第一个点. 注意常见的分块玄学操作 n = min(sqrt(N), 100) 和 n = ...

  9. bzoj 2002 Bounce 弹飞绵羊

    2002: [Hnoi2010]Bounce 弹飞绵羊 时间限制: 10 Sec   内存限制: 259 MB 提交: 16133   解决: 8253 题目描述 某天,Lostmonkey发明了一种 ...

最新文章

  1. 《Java 开发从入门到精通》—— 2.2 编写第一段Java程序
  2. 如何利用OpenCV寻找轮廓的中心?
  3. 小憩,味一二 ——08年3月编程手札
  4. PCA与SVD的关系
  5. listview winfrom 表头_winform ListView点击行表头,排序
  6. FFmpeg 5.0 正式发布
  7. linux文件系统dentry_Linux文件系统(四)---三大缓冲区之inode缓冲区 (内存inode映像 )...
  8. GPG96244QS1屏驱动难题
  9. CMakeLists.txt使用boost库
  10. 配置python程序debug/run,避免每次运行都会重复加载数据集或模型,节约大量等待时间
  11. java 随机生成大写字母_java 生成随机大写字母,整数,小写字母
  12. java 当前时间 long_java 获取当前的日期、时间, 日期、字符串、long之间的相互转换...
  13. OBV指标的活用以及OBV指标的解析
  14. java下载https的网络图片,添加安全证书方式
  15. ArcGIS桌面构建三维地质体模型
  16. 图形形状及颜色识别【Python大作业】
  17. vue图形验证码组件
  18. scala当中的文件操作、网络请求和隐式转换
  19. 不知道买啥绘本?适合3-6岁儿童的绘本书单,建议父母收藏
  20. 基础篇:String字符串之截取、分割、替换

热门文章

  1. 战略锁定技术创新 神州数码云转型进入“核心区”
  2. 揭秘是什么?让开屏广告效益几何增长
  3. Windows程序设计——两个重要的参数wParam和lParam
  4. 字符串中如何删除一个字符
  5. 【架构实践】分布式系统的“脑裂”到底是个什么玩意?
  6. JBPM4.4入门学习一:JBPM安装配置及构建数据库环境
  7. 导出Excel设置名称为中文
  8. 同声传译英文软件有哪些?安利3款好用的同声传译软件
  9. ResNet(残差网络)和梯度消失/爆炸
  10. #5-【进制转换专题】牛记数