「HNOI2010」弹飞绵羊

传送门

考虑分块。

每一个位置 \(i\) ,记 \(to[i]\) 表示从这个位置一直往右跳回落在哪个位置。

然后修改的时候直接暴改,查询也是暴跳,复杂度 \(O(n \sqrt n)\)

参考代码:

#include <algorithm>
#include <cstdio>
#include <cmath>
#define rg register
#define file(x) freopen(x".in", "r", stdin), freopen(x".out", "w", stdout)
using namespace std;
template < class T > inline void read(T& s) {
s = 0; int f = 0; char c = getchar();
while ('0' > c || c > '9') f |= c == '-', c = getchar();
while ('0' <= c && c <= '9') s = s * 10 + c - 48, c = getchar();
s = f ? -s : s;
} const int _ = 200010; int n, f[_], k[_];
int gap, pos[_], to[_], l[_ >> 1]; int main() {
#ifndef ONLINE_JUDGE
file("cpp");
#endif
read(n), gap = sqrt(n * 1.0);
for (rg int i = 1; i <= n; ++i) {
read(k[i]), pos[i] = (i - 1) / gap + 1;
if (pos[i - 1] != pos[i]) l[pos[i]] = i;
}
l[pos[n] + 1] = n + 1;
for (rg int i = n; i >= 1; --i) {
if (i + k[i] >= l[pos[i] + 1])
f[i] = 1, to[i] = i + k[i];
else
f[i] = f[i + k[i]] + 1, to[i] = to[i + k[i]];
}
int q; read(q);
for (rg int opt, x, o = 1; o <= q; ++o) {
read(opt), read(x), ++x;
if (opt == 1) {
int res = 0;
while (x <= n) res += f[x], x = to[x];
printf("%d\n", res);
} else {
read(k[x]);
for (rg int i = l[pos[x] + 1] - 1; i >= l[pos[x]]; --i) {
if (i + k[i] >= l[pos[x] + 1])
f[i] = 1, to[i] = i + k[i];
else
f[i] = f[i + k[i]] + 1, to[i] = to[i + k[i]];
}
}
}
return 0;
}

最新文章

  1. NPOI对Excel的操作(Sheet转DataTable、List&lt;T&gt;)
  2. J2EE Web开发入门—通过action是以传统方式返回JSON数据
  3. U3D中IOS平台泛型方法尽少使用
  4. 我的2011年总结--大明zeroson程序猿一周年总结
  5. css3 如何实现圆边框的渐变
  6. JavaScript 知识点
  7. jdbc模板
  8. 给大家推荐8个SpringBoot精选项目
  9. Eleaticsearch源码分析(一)编译启动
  10. Win32汇编学习(6):键盘输入消息
  11. Boinx FotoMagico for Mac(电子相册制作工具)破解版安装
  12. js时间与时间戳互相转换
  13. Mongodb 折腾笔记
  14. windows cmake安装
  15. 真实世界中的 Swift 性能优化
  16. HTML小记
  17. PHP学习笔记之interface关键字
  18. scvmm应答文件 无人值守安装系统
  19. Unity中Invoke 和 InvokeRepeating的区别
  20. 【转载】Android控件属性大全

热门文章

  1. 一年读100本书---HHR,NZJ---19年最后4个月
  2. python pylab.plot() 方法使用
  3. Springboot项目搭建(1)-创建,整合mysql/oracle,druid配置,简单的CRUD
  4. 连接数据库报错Access denied for user &#39;root&#39;@&#39;localhost&#39; (using password:YES)
  5. 计算机二级-C语言-程序填空题-190110记录-文件写入与文件读出显示
  6. 批量离线安装jar 包到maven本地仓库
  7. Windows server 2012 R2 服务器用户自动锁定
  8. 「BJWC2010」模板严格次小生成树
  9. 惠普台式机,如何选择U盘启动
  10. 调用webservice服务(通过反射的方式动态调用)