当前位置: 首页 > news >正文

P3203 [HNOI2010] 弹飞绵羊

P3203 [HNOI2010] 弹飞绵羊

大意

\(i\) 的地方会向后跳 \(a[i]\) 次,然后带修询问你最少需要跳几次能跳出这个长度为 \(n\) 的地方

思路

首先我们发现每个点的弹出,会影响下一个点 \(i + a[i]\),也就是说我们如果暴力的考虑的话,就只需修改的时候向后一直跳。

但是这样很劣啊,我们可以考虑用分块处理这个问题,我们可以考虑倒序处理,当后面的点处理过后,你就可以把前面的点从后面转移。

于是我们只需要记录 \(cnt[i]\) 次才能跳出第 \(i\) 块,以及 \(nxt[i]\) 弹出块后落到的第一个位置。

那么我们就可以分块直接处理这个玩意,当一个点被修改的时候,只会影响这个点所在的块,直接重新对这个块建一遍即可。

代码

#include<iostream>
#include<cmath>
#include<algorithm>
using namespace std;const int MAXN = 2 * 1e5 + 5;
int n, m, B, sz = 0;
int a[MAXN], cnt[MAXN], nxt[MAXN];inline void build(int x){int l = x * B + 1;int r = min(n, (x + 1) * B);for(int i = r; i >= l; i--){int nx = i + a[i];if(nx > n){cnt[i] = 1;nxt[i] = -1;}else if(nx > r){cnt[i] = 1;nxt[i] = nx;}else{cnt[i] = 1 + cnt[nx];nxt[i] = nxt[nx];}}
}int main(){ios::sync_with_stdio(0);cin.tie(0); cout.tie(0);cin >> n;B = sqrt(n);sz = (n - 1) / B + 1;for(int i = 1; i <= n; i++){cin >> a[i];}for(int i = 0; i < sz; i++){build(i);}cin >> m;while(m --){int op; cin >> op;if(op == 1){int x; cin >> x;x ++;int res = 0;while(x != -1){res += cnt[x];x = nxt[x];}cout << res << '\n';}else{int x, y; cin >> x >> y;x ++;a[x] = y;int p = (x - 1) / B;build(p);}}return 0;
}
http://www.jsqmd.com/news/187969/

相关文章:

  • 外贸采购商实用工具:从供应商图片报价单提取价格与规格
  • 电商主图审核:标题文字OCR识别过滤夸大宣传内容
  • 盘点2025年最火火锅店,看看你心仪的品牌上榜没?社区火锅/老火锅/美食/特色美食/火锅店/烧菜火锅/火锅火锅哪家好吃怎么选择 - 品牌推荐师
  • 2025年本地口碑打包带厂家排行榜TOP10,专业的打包带哪家好综合实力与口碑权威评选 - 品牌推荐师
  • 沉默的观察者:Multi-Agent 架构如何实现“零指令”主动服务?
  • 利用AI技术优化SEO关键词的创新策略与市场分析
  • Python Pandas 实战:处理百万级数据关联与清洗的避坑指南
  • 如何将腾讯混元OCR嵌入Web应用:基于HTML和JS的实现路径
  • vue+uniapp+springboot健康生活助手活动报名微信小程序的可视化
  • 印象助手发布更新v1.2.5
  • HuggingFace镜像网站同步腾讯混元OCR模型提升下载速度
  • 2025年目前口碑好的聚酯尼龙袋销售厂家口碑排行,包装袋/聚酯尼龙袋/八边封包装袋,聚酯尼龙袋定制厂家有哪些 - 品牌推荐师
  • vue+uniapp+springboot基于小程序的企业员工考勤打卡系统设计与实现-
  • 瑞芯微刷openwrt串口不能输入问题,openwrt串口显示正常,但是输入故障,根源是rockchip的设备树问题!
  • 【C#高手进阶必读】:深度剖析Span在高并发场景中的应用
  • 企业私有化部署方案:如何在内网环境中运行腾讯混元OCR
  • 从零构建C#拦截器,轻松实现HTTP/HTTPS流量捕获与分析
  • 【C#企业系统模块设计精髓】:掌握高内聚低耦合的5大核心原则
  • 揭秘C#跨平台日志难题:如何在Linux、macOS和Windows统一输出日志?
  • 【C# 高级编程实战】:揭秘交错数组初始化背后的内存分配机制
  • 希尔排序采用“增量分组插入排序”的策略
  • 建筑图纸信息提取:施工图中标注文字识别与BIM系统对接
  • 政务大厅智能化:居民办事材料现场扫描即时结构化输出
  • 【C#跨平台开发必杀技】:如何实现高效方法拦截与AOP编程
  • C# 交错数组初始化完全解析(从基础到高性能实践)
  • 瑞芯微刷openwrt串口不能输入问题,根源是设备树问题!
  • 海洋科考船日志:航海手稿OCR识别保存珍贵历史资料
  • C# 交错数组如何正确初始化?90%开发者忽略的3个关键细节
  • 多语种文字识别神器!腾讯混元OCR支持超100种语言精准提取
  • 气象观测站数据:人工记录天气日志OCR识别补全自动化缺失