P13508 [OOI 2024] Burenka and Pether

news/2025/11/12 15:19:04/文章来源:https://www.cnblogs.com/cjoierzdc/p/19214173

对于任意一个点 \(i\)\(i\) 能直接到达的点 \(p\) 需要 \(a_p\ge a_i\),且 \(p\le r_i\),其中 \(r_i\)\(i\) 能到的最后一个 \(<a_i\) 的位置 \(+d\)\(r_i\) 可以按值域扫描线预处理。

对于 \(a_{v_i}\) 扫描线,同时禁用所有 \(>a_{v_i}\) 的元素。那么此时对于一个点 \(i\),它的下一步就一定是走到 \([i,r_i]\) 中未禁用的最大值的位置,不妨设为 \(p_i\)

考虑在扫描线同时维护出 \(p_i\)。扫描的值 \(v\to v+1\) 时,所有 \([i,r_i]\) 包含 \(v+1\) 对应下标的 \(i\)\(p_i\) 都会更新,总修改数是非常大的。一个根号分治的思路是我们只修改 \(r_i-i+1\le\sqrt{n}\) 的所有 \(p_i\),这样修改数就降到了 \(O(n\sqrt{n})\)

对于查询,考虑用类似弹飞绵羊的做法处理 \(r_i-i+1\le\sqrt{n}\),虽然修改次数 \(O(n\sqrt{n})\),但是都集中在左侧的 \(O(1)\) 个块,只要对于这些块重构即可。如果当前区间长度 \(>\sqrt{n}\) 就查询一次区间 \(\max\),这个可以用分块维护做到改 \(O(\sqrt{n})\) 改,\(O(\frac{len}{\sqrt{n}})\) 查。

如果对 \([i,r_i]\) 进行了一次区间查 \(\max\),那么下一次往后一定会跳到 \(>r_i\) 的位置上。因此查询 \(\max\) 的区间长度和是 \(O(n)\) 的,总复杂度就是 \(O((n+q)\sqrt{n})\)

#include <bits/stdc++.h>
using namespace std;const int kN = 3e5 + 5, B = 550, kC = kN / B + 5;
int n, d, g, q;
int a[kN], inv[kN], lim[kN], nxt[kN];
vector<int> qrv[kN];struct Qry {int op, l, r;
} qry[kN];
int res[kN];void PreWork() {set<int> st {0, n + 1};set<pair<int, int>> sp {make_pair(0, n + 1)};for(int i = 1; i <= n; i++) {int id = inv[i];auto it = st.lower_bound(id);auto pv = prev(it);if(*it - *pv > d) sp.erase(make_pair(*pv, *it));if(*it - id > d) sp.emplace(id, *it);if(id - *pv > d) sp.emplace(*pv, id);st.insert(it, id);auto itt = sp.lower_bound(make_pair(id, 0));if(itt != sp.begin() && (prev(itt) -> second > id + d)) {lim[id] = id + d;}else if(itt != sp.end()) {lim[id] = itt -> first + d;}else {lim[id] = n;}}
}int Bel(int x) { return (x - 1) / B + 1; }
int L(int b) { return (b - 1) * B + 1; }
int R(int b) { return min(b * B, n); }
struct DS1 {int pre[kN], suf[kN];int mx[kC];void Modify(int x, int v) {int b = Bel(x), bl = L(b), br = R(b);mx[b] = v;fill(pre + x, pre + br + 1, v);fill(suf + bl, suf + x + 1, v);}int Query(int l, int r) {assert(r - l + 1 > B);int bl = Bel(l), br = Bel(r);int res = max(suf[l], pre[r]);for(int i = bl + 1; i < br; i++) res = max(res, mx[i]);return res;}
} ds1;struct DS2 {int nxt[kN], jp[kN], dep[kN];void Init() {for(int i = 1; i <= n; i++) {jp[i] = i;}}void Modify(int x, int v) { nxt[x] = v; }void ReBuild(int b) {int l = L(b), r = R(b);for(int i = r; i >= l; i--) {if(!nxt[i] || (nxt[i] > r)) jp[i] = i, dep[i] = 0;else {jp[i] = jp[nxt[i]];dep[i] = dep[nxt[i]] + 1;}}}
} ds2;int main() {// freopen("root.in", "r", stdin);// freopen("root.out", "w", stdout);ios::sync_with_stdio(0), cin.tie(0);cin >> n >> d >> g;for(int i = 1; i <= n; i++) {cin >> a[i];inv[a[i]] = i;}cin >> q;for(int i = 1; i <= q; i++) {cin >> qry[i].op >> qry[i].l >> qry[i].r;if(a[qry[i].l] < a[qry[i].r]) {qrv[qry[i].r].push_back(i);}}PreWork();for(int i = 1; i <= n; i++) lim[i] = min(n, lim[i]);ds2.Init();for(int v = 1; v <= n; v++) {int p = inv[v];ds1.Modify(p, v);int mn = n + 1, mx = 0;for(int i = p - 1; i >= max(1, p - B + 1); i--) {if((lim[i] - i + 1 <= B) && (lim[i] >= p)) {mn = min(mn, i);mx = max(mx, i);ds2.Modify(i, nxt[i] = p);}}if(mn <= mx) {int bl = Bel(mn), br = Bel(mx);for(int i = bl; i <= br; i++) {ds2.ReBuild(i);}}for(int id : qrv[p]) {int l = qry[id].l, ans = 0;while(l < p) {while(Bel(l) < Bel(p)) {ans += ds2.dep[l];l = ds2.jp[l];if(!nxt[l]) break;if(nxt[l] < p) l = nxt[l], ans++;else break;}while(nxt[l] && (nxt[l] < p)) l = nxt[l], ans++;if(!nxt[l] && (lim[l] - l + 1 <= B)) { ans = 0; break; }if(l == p) break;if(nxt[l] == p) { ans++; break; }if(!nxt[l]) {int old = l;l = inv[ds1.Query(l, lim[l])];if(l == old) { ans = 0; break; }else ans++;}}res[id] = ((qry[id].op == 1) ? (ans >= 1) : ans);}}for(int i = 1; i <= q; i++) {cout << res[i] << "\n";}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/963473.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

常见的无状态服务与典型有状态服务

常见的无状态服务与典型有状态服务要区分无状态服务和有状态服务,核心标准是:无状态服务:不存储业务数据,每次请求独立(输入相同则输出相同),可随意扩容 / 迁移,依赖外部存储(如数据库、缓存)保存状态; 有状…

CF1720D2 Xor-Subsequence (hard version)

这个题无论是 D1 还是 D2 都很具有思维含量。 首先考虑 \(a_i \le 200\) 怎么做。 考虑异或有性质 \(|a - b| \le a \oplus b \le a + b\),那么推一下就会知道目前 \(j\) 一定 \(\ge i - 400\),暴力枚举即可。 然后思…

如何实现大模型和本企业内部知识相结合形成一个适合本企业的小模型

将大模型与企业内部知识结合,构建适合本企业的“小模型”或增强型应用,核心目标是让通用大模型具备企业专属的知识、语言风格和业务逻辑,同时避免从零训练大模型的高成本和高门槛。以下是具体实现路径和关键步骤: …

etcd的压缩和碎片整理提升性能

压缩+碎片整理(逐节点执行,先压缩后整理,避免并发)bash 复制for ep in ${ENDPOINTS//,/ }; doecho "==> working on $ep"# 取得当前 revisionREV=$(etcdctl --endpoints=$ep endpoint status --write…

Maven 继承的“隐形杀手”:被你忽略的 relativePath

在日常的 Maven 多模块项目开发中,我们对 <parent> 标签带来的继承便利习以为常。但在这个便利之下,隐藏着一个微小却极易被忽视的配置:<relativePath>。 你是否遇到过这样的“灵异事件”:在 IDEA 中,…

【SPIE出版 | 往届会后3个月完成EI检索】第二届遥感与数字地球国际学术会议 (RSDE 2025)

2025年第二届遥感与数字地球国际学术会议(RSDE 2025)定于2025年11月14-16日在云南大理隆重举行。【高录用稳检索 | 往届会后3个月完成EI检索】 【团队报名享优惠 | 参会方式:口头汇报、海报展示、仅参会】 第二届遥…

基础模型+场景微调

“基础模型 + 场景微调”是目前性价比最高、最主流的企业级AI落地方式。它的核心思想是:站在巨人的肩膀上,不重复造轮子。 下面我将为你详细拆解这个过程,并结合一个具体的例子来说明。 核心概念解析基础模型 (Foun…

血月奇观科学解码:当“红月亮”邂逅古今文明,一场跨越千年的宇宙浪漫

2025年的血月有点不一般!图源澎湃新闻尽管 2025 年 9 月 8 日那场震撼的 “血月” 奇观已在夜空落幕,但它背后的科学奥秘与文化意涵仍值得我们回溯解析。根据中国科学院紫金山天文台的观测记录,此次月全食的本影食从…

使用产品密钥升级Windows 11专业版及Windows 11专业工作站版

Win11 专业版:面向个人与中小企业用户,提供BitLocker磁盘加密、远程桌面连接、组策略管理、域加入等高级功能,支持安全高效的办公与系统管理,满足日常专业需求。 Windows 11 专业版 密钥 Win11 专业工作站版:专为…

局域网扫码枪/局域网二维码接收工具

局域网扫码枪/局域网二维码接收工具扫码枪在识别印刷于芯片表面的二维码时,存在识别效率较低、准确率不高的问题。 相比之下,手机摄像头性能更强,结合微信扫码功能,识别速度更快、准确度更高。 因此,考虑通过微信…

Rust:关于Future和JoinHanlder的思考

Future和JoinHandler是不同的,但这两个都与异步(多线程)相关。 概念不同JoinHandler:是指一个异步方法的句柄,用来监控或控制这个异步方法,以及接收异步方法的执行结果。 Future:表示的是在未来某个时刻执行的代…

2025年衣柜顶线定做厂家权威推荐榜单:石膏顶线/欧式顶线/脚线源头厂家精选

一樘精美的衣柜,少不了那画龙点睛的顶线。它不仅是缝隙的遮蔽者,更是空间风格的塑造者。 在当今家居装修市场,全屋定制的渗透率正持续提升,消费者对细节装饰的需求也日益精细化。作为连接衣柜与天花的关键元素,衣…

完整教程:AI编程工具(Cursor/Copilot/灵码/文心一言/Claude Code/Trae)AI编程辅助工具全方位比较

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

【IEEE出版 | 连续4年稳定EI检索】第五届新能源与电力工程国际学术会议(ICNEPE 2025)

第五届新能源与电力工程国际学术会议(ICNEPE 2025)将于2025年11月14日至16日在中国广州隆重举行。【连续4年稳定EI检索,发表有保障!】 【院士、Fellow出席报告,行业内精彩报告!EI期刊和EI会议检索同时征稿】 第五…

习题解析之:计算圆周率——拉马努金法

习题解析之:计算圆周率——拉马努金法【问题描述】编写一个拉马努金公式计算圆周率大小的小程序。 拉马努金曾经提出过很多关于求π的公式,这些公式都有以下几个特点: 等号右边的构造超乎常人想象,收敛速度极快! …

【刷题笔记】Placing Squares

Placing Squares 题解 拍死脑袋也想不出来啊。 敲黑板: \(x^2\) 的组合意义,就是在一个长为 \(x\) 的区间内放小球(一个黑色,一个白色,可以重叠)的方案数。 这样题目就转化为了在一个序列内插板,每两个板之间放…

P2279 [HNOI2003] 消防局的设立 题解加总结

正题之前 又是一道抓耳挠腮想了好久的好题, AC 了之后,感觉自己的思想又得到了洗礼 QwQ ,第一次写题解,有错望老师见谅 题目传送门思路 因为题目求的是覆盖树上所有点的所放置最少的消防站数量,因此此题需使用树形…

火车头采集器教程:夸克网盘批量转存(附工具)

本文将为你详细拆解火车头采集器与夸克网盘的配合技巧,通过这套教程,你能轻松把采集器抓取到的夸克网盘链接资源,一键转存至自己的夸克网盘,还能自动生成新的分享链接,极大提升资源整理效率。一、前置准备:工具与…

2025年隔音棉供货厂家权威推荐榜单:阻燃泡沫/隔热棉/阻燃棉源头厂家精选

在建筑装饰与家居品质需求持续升级的背景下,性能优异的隔音棉已成为酒店、KTV、住宅乃至工业厂房等多种场景的刚需材料。 据行业报告数据显示,2024年中国建筑隔音棉市场规模已达数十亿元人民币,预计到2031年将继续保…

售后无忧!CRMEB售后订单处理指南,高效管理退款退货流程

售后订单,显示用户提交的退款订单 1、订单筛选 订单—>售后订单在售后订单列表中,支持使用退款单状态、退款发起时间、退款单号进行搜索筛选; 2、订单退款/拒绝; 可查看订单详情,添加备注信息。操作立即退款或…