题意简述

有n个点,第i个点有一个ki,表示到达i这个点后可以到i + ki这个点

支持修改ki和询问一点走几次能走出所有点两个操作

题解思路

分块,

对于每个点,维护它走到下一块所经过的点数,它走到下一块到的店的编号

每次修改只会对这块左端点到这个点产生影响

代码

#include <cmath>
#include <cstdio>
using namespace std;
struct Point{
int k, s, x, num;
}p[200010];
int n, m, len, ii, ans;
void update(int x)
{
int xx = x + p[x].k;
if (xx >= n) p[x].s = 1, p[x].x = -1;
else if (p[x].num != p[xx].num) p[x].s = 1, p[x].x = xx;
else p[x].s = p[xx].s + 1, p[x].x = p[xx].x;
}
int main()
{
scanf("%d", &n);
len = sqrt(n);
for (register int i = 0; i < n; ++i)
{
scanf("%d", &p[i].k);
p[i].num = i / len;
}
for (register int i = n - 1; i + 1; --i)
update(i);
scanf("%d", &m);
for (register int i = 1; i <= m; ++i)
{
int opt;
scanf("%d", &opt);
if (opt == 1)
{
int cnt = 0;
scanf("%d", &ii);
for (ans = 0; ii != -1; ans += p[ii].s, ii = p[ii].x)
++cnt;
printf("%d\n", ans);
}
else
{
scanf("%d", &ii);
scanf("%d", &p[ii].k);
for (register int j = ii; j >= 0 && p[j].num == p[ii].num; --j)
update(j);
}
}
}

最新文章

  1. Arc GIS engine10.2与VS2012的安装及匹配步骤
  2. 缺少.lib文件导致的Link2019 解决方案汇总
  3. 错误-spring3.2的架构在tomcat6.0中无法正常启动,抛出java.lang.NoClassDefFoundError: javax/servlet/AsyncListener
  4. javascript语言精粹
  5. ue4 重新生成ide project文件的命令行
  6. Dynamics AX 2012 R2 报表部署权限错误
  7. C语言 函数理解(以数组做参数)
  8. JQuery onload、ready概念介绍及使用方法
  9. (转载)Nim游戏博弈(收集完全版)
  10. [OC] UITabBarController
  11. Sublime字体设置
  12. ORACLE 动态注册和静态注册的区别(转)
  13. 框架基础:ajax设计方案(二)---集成轮询技术
  14. iOS View 模糊效果(毛玻璃)
  15. [转载] 深入了解Java ClassLoader、Bytecode 、ASM、cglib
  16. &lt;input&gt;标签单、复选相关查询地址
  17. ELK 日志分析实例
  18. VB6 加载水晶报表例子
  19. debian8安装harbor
  20. 判别式模型 vs. 生成式模型

热门文章

  1. 每周一个js重要概念之一 调用堆栈
  2. GitHub使用整理——关于上传Keil工程一些注意的点
  3. py+selenium一个可被调用的登录测试脚本【待优化】
  4. [原创]OpenvSwitch安装
  5. Android自定义的属性的使用
  6. [小米OJ] 6. 交叉队列
  7. 如何在windows上玩转redis的最新特性?
  8. CSS(下)
  9. Ambassador,云原生应用的“门神”
  10. 异步请求xhr、ajax、axios与fetch的区别比较