我们只需将序列分成 n\sqrt{n}n​ 块,对于每一个点维护一个 val[i]val[i]val[i],to[i]to[i]to[i],分别代表该点跳到下一个块所需要的代价以及会跳到的节点编号。在查询时,我们最多会跳 n\sqrt{n}n​ 块,修改的时候将节点所在区间暴力修改即可。
Code:

#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
const int maxn = 2000000 + 3;
int arr[maxn], n, block, to[maxn], val[maxn], m, belong[maxn];
struct Data_Structure{inline void init(){block = sqrt(n);for(int i = n;i >= 1; --i) {belong[i] = (i - 1) / block + 1;to[i] = belong[i + arr[i]] == belong[i] ? to[i + arr[i]] : i + arr[i];val[i] = belong[i + arr[i]] == belong[i] ? val[i + arr[i]] + 1 : 1;}}inline int solve(){int pos, ans = 0;scanf("%d",&pos);++pos;while(pos <= n){ans += val[pos];pos = to[pos];}return ans;}inline void update(){int pos, data;scanf("%d%d",&pos,&data);++pos;arr[pos] = data;for(int i = min(belong[pos] * block, n); i >= (belong[pos] - 1) * block + 1; --i){to[i] = belong[i + arr[i]] == belong[i] ? to[i + arr[i]] : i + arr[i];val[i] = belong[i + arr[i]] == belong[i] ? val[i + arr[i]] + 1 : 1;}}
}T;
int main(){scanf("%d",&n);for(int i = 1;i <= n; ++i) scanf("%d",&arr[i]);T.init();scanf("%d",&m);while(m--){int opt;scanf("%d",&opt);switch(opt){case 1:{printf("%d\n", T.solve());break;}case 2:{T.update();break;}}}return 0;
}

  

转载于:https://www.cnblogs.com/guangheli/p/9845089.html

洛谷 P3203 [HNOI2010]弹飞绵羊 分块相关推荐

  1. P3203 [HNOI2010]弹飞绵羊

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

  2. luogu P3203 [HNOI2010]弹飞绵羊(LCT ? 暴力分块 ! )

    整理的算法模板合集: ACM模板 已知:暴力 + 暴力 + 10510^5105 = 分块 设 need[i] 表示从 i 开始,跳出所在块的步数:ver[i] 表示跳出当前所在的块后到了哪里: 罗老 ...

  3. BZOJ 2002 HNOI2010 弹飞绵羊 分块

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

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

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

  5. BZOJ-2002-Bounce弹飞绵羊-分块

    描述 Lostmonkey在地上沿着一条直线摆上n个装置,每个装置设定初始弹力系数ki,当绵羊达到第i个装置时,它会往后弹ki步,达到第i+ki个装置,若不存在第i+ki个装置,则绵羊被弹飞.绵羊想知 ...

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

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

  7. [HNOI2010]弹飞绵羊

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

  8. HNOI2010——弹飞绵羊(lct)

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

  9. 分块-洛谷P3203 [HNOI2010]BOUNCE 弹飞绵羊

    https://www.luogu.org/problem/show?pid=3203#sub 这道题第一次TLEl,然后改了改变成AC: 所以说这种题目,时限卡得很紧,一定要思考理论复杂度和常数的问 ...

  10. BZOJ P2002 [HNOI2010] 弹飞绵羊【分块】

    这道题就很优秀了.考试的时候完全没想到正解,最后写了一个暴力20分- 直接讲分块吧.我们预处理两个数组 S t e p [ ] , G e t [ ] Step[],Get[] Step[],Get[ ...

最新文章

  1. 某程序员毕业进UC,被阿里收购!跳去优酷土豆,又被阿里收购!再跳去饿了么,还被阿里收购!难道阿里想收购的是他?...
  2. MVC 源码系列之路由(一)
  3. 浅析影响网站建设的因素有哪些?
  4. A*寻径算法新手入门(转载)
  5. java 句柄池_深入理解JVM之Java对象的创建、内存布局、访问定位详解
  6. java高级断言_Java之断言
  7. 王佩丰第2讲-excel单元格格式设置 笔记
  8. 【SpringBoot + Docker】编写Dockerfile安装jdk11.0.3,并部署SpringBoot项目
  9. 运动会成绩管理系统python_Python 实现简易版成绩管理系统
  10. 内核中引发bug并打印信息
  11. mysql key_len_浅谈mysql explain中key_len的计算方法
  12. Python 小白从零开始 PyQt5 项目实战(3)信号与槽的连接
  13. 吃糖果(信息学奥赛一本通-T1193)
  14. rabbitmq 消费端代码获取队列名称_RabbitMQ四:生产者--队列--消费者
  15. usage java,dnsjava usage
  16. 使用JavaScript将小写金额转化为大写金额的两种常见方法
  17. 随机效应估算与固定效应估算_混合OLS模型、固定效应模型、随机效应模型的区别是什么...
  18. python-opencv-使图片更清晰的几种方法
  19. 开启Win7快速启动栏
  20. python turtle 绘制北京天安门

热门文章

  1. golang 读取Excel 或者map字符型返回结构体数组
  2. elasticsearch6.x.x logstash6.x.x kibana6.x.x Filebeat6.x 配置及安装 CentOS7.3或更高
  3. nginx apache tomcat 相关收藏
  4. Nginx 解决请求跨域 与 配置 gzip 压缩
  5. java镜像_012 制作Java基础镜像
  6. 阶段5 3.微服务项目【学成在线】_day03 CMS页面管理开发_17-异常处理-可预知异常处理-异常处理测试...
  7. tomcat优化实例
  8. nexus配置第三方库文件
  9. selenium RC优化代码3
  10. 关于鼓励软件产业和集成电路产业发展有关税收政策问题的通知