QOJ #967. Rectangle Painting 题解

news/2025/10/25 17:09:52/文章来源:https://www.cnblogs.com/Scarab/p/19161803

Description

小 N 不会写代码,所以他只会简单数据结构,于是他找到了一个基础线段树练习题。

在数轴上,每个自然数点都有一个可重集 \(A_0, A_1, A_2, \ldots\),初始时均为空。

你要支持以下操作 \(q\) 次:

  • \(x, a, b\):对 \(\forall a \le i \le b\),在 \(A_i\) 中插入元素 \(x\)
  • \(l, r\):求 \(\displaystyle \max_{l \le i \le r} \operatorname{mex} A_i\)

由于这太简单了,所以这个题强制在线

\(1\leq q\leq 10^5,0\leq a,b,l,r,x\leq 2\times 10^5\)

Solution

首先考虑不强制在线怎么做。

对于单个集合,注意到向它里面插入元素 \(x\) 是不好维护 \(\text{mex}\) 的,但是如果是删除元素 \(x\),就可以直接让 \(\text{mex}\leftarrow\min(\text{mex},x)\)

所以离线时可以先把所有集合最终的 \(\text{mex}\) 求出来,再倒着删除插入操作,并进行区间 \(\text{chkmin}\) 即可。


回到这道题。

考虑对于每个 \(x\),用线段树计算它对哪些集合造成贡献。

然后维护集合 \(B_i\) 表示所有 \(A_i\) 中没有出现过的元素,初始 \(B_i=\mathbb{N}^*\),那么问题变为:

  • 区间删除一个元素 \(x\)
  • 查询 \(\displaystyle \max_{l \le i \le r} \operatorname{mex} B_i\)

再用 set 维护所有极长区间,满足 \(x\) 在这些区间的 \(B_i\) 中出现了,那么 \(x\) 就只能对这个 set 里的区间造成贡献。容易用颜色段均摊做。

计算区间贡献时就在每个线段树节点上维护个 set 即可。

时间复杂度:\(O(n\log n+q\log^2n)\)

Code

#include <bits/stdc++.h>// #define int int64_tusing i64 = int64_t;const int kMaxN = 2e5 + 5;int n = 2e5, q;
std::set<std::pair<int, int>> seg[kMaxN];struct SGT {int val[kMaxN * 4];std::set<int> st[kMaxN * 4];void pushup(int x) {val[x] = std::min(!st[x].size() ? n : *st[x].begin(), std::max(val[x << 1], val[x << 1 | 1]));}void build(int x, int l, int r) {val[x] = n;if (l == r) return;int mid = (l + r) >> 1;build(x << 1, l, mid), build(x << 1 | 1, mid + 1, r);}void update(int x, int l, int r, int ql, int qr, int v, bool op = 1) {if (l > qr || r < ql) {return;} else if (l >= ql && r <= qr) {if (op) st[x].emplace(v);else st[x].erase(v);return l == r ? void(val[x] = (!st[x].size() ? n : *st[x].begin())) : pushup(x);}int mid = (l + r) >> 1;update(x << 1, l, mid, ql, qr, v, op), update(x << 1 | 1, mid + 1, r, ql, qr, v, op);pushup(x);}int query(int x, int l, int r, int ql, int qr) {if (l > qr || r < ql) return 0;else if (l >= ql && r <= qr) return val[x];int mid = (l + r) >> 1;return std::min(!st[x].size() ? n : *st[x].begin(), std::max(query(x << 1, l, mid, ql, qr), query(x << 1 | 1, mid + 1, r, ql, qr)));}
} sgt;void split(int x, int p) {auto it = seg[x].lower_bound({p + 1, 0});if (it == seg[x].begin()) return;--it;auto [l, r] = *it;if (l == p || r < p) return;sgt.update(1, 0, n, l, r, x, 0), sgt.update(1, 0, n, l, p - 1, x, 1), sgt.update(1, 0, n, p, r, x, 1);seg[x].erase(it), seg[x].emplace(l, p - 1), seg[x].emplace(p, r);
}void ins(int l, int r, int v) {split(v, l), split(v, r + 1);for (auto it = seg[v].lower_bound({l, 0}); it != seg[v].end() && it->second <= r; it = seg[v].lower_bound({l, 0})) {sgt.update(1, 0, n, it->first, it->second, v, 0);seg[v].erase(it);}
}int query(int l, int r) { return sgt.query(1, 0, n, l, r); }void dickdreamer() {std::cin >> q;sgt.build(1, 0, n);for (int i = 0; i <= n; ++i) seg[i].emplace(0, n), sgt.update(1, 0, n, 0, n, i, 1);i64 S = 0;for (int i = 1; i <= q; ++i) {int op;i64 v, l, r;std::cin >> op;if (op == 1) {std::cin >> v >> l >> r;v ^= S, l ^= S, r ^= S;ins(l, r, v);} else {std::cin >> l >> r;l ^= S, r ^= S;int res = query(l, r);std::cout << res << '\n';S += res;}}
}int32_t main() {
#ifdef ORZXKRfreopen("in.txt", "r", stdin);freopen("out.txt", "w", stdout);
#endifstd::ios::sync_with_stdio(0), std::cin.tie(0), std::cout.tie(0);int T = 1;// std::cin >> T;while (T--) dickdreamer();// std::cerr << 1.0 * clock() / CLOCKS_PER_SEC << "s\n";return 0;
}

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

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

相关文章

C语言基础补全

基础巩固 一. 程序 1. 程序为什么要经过编译器编译才能运行计算机能识别的只有机器语言机器语言: 二进制代码. 由 0 和 1 组成 010101 等指令机器语言难记, 为方便编写程序增加易记忆的助记符, 汇编语言便应运而生在汇…

docker 端口映射

docker 端口映射docker 删除所有容器 必须先停再删,再启动 [root@localhost ~]# [root@localhost ~]# docker rm $(docker ps -qa) 1f2abcd6ae16 Error response from daemon: cannot remove container "/c1&q…

2025 建筑陶粒厂家最新推荐榜:回填 / 粘土 / 滤料 / 混凝土等多品类优选,实力企业权威测评推荐!

引言 随着绿色建筑理念深化,建筑陶粒在高层建筑、环保工程等领域需求激增,2025 年市场规模持续扩大,但行业乱象凸显:35% 的小厂产品抗压性不达标,52% 的采购者反馈 “品牌选择难”。为破解难题,本榜单联合中国建…

251025

目录JT-JY10T3S1-1JT-JY10T3S1-2 JT-JY10T3S1-1Good morning, welcome to the early learning childcare center, how may i help you? Hi, i sopke you last week about enrolling my daughter for next year. Oh, y…

2025 年最新地磅制造厂家推荐排行榜:聚焦品质创新服务,助力企业精准选优质地磅汽车衡 / 大型 / 可移动 / 100 吨 / SCS 型 / 自动称重地磅推荐

引言 在工业生产、物流运输等领域,地磅作为关键称重设备,其性能直接影响企业运营效率与成本控制。当前地磅市场厂家数量众多,产品质量却差异显著,部分厂家用劣质材料生产,导致地磅易损、精度不足;不少厂家创新滞…

layui多文件上传表格

layui多文件上传表格{layout name="layout" /}<style>.ellipsis-cell {overflow: hidden;text-overflow: ellipsis;white-space: nowrap;}.fixed-table {table-layout: fixed;} </style><div…

「学习笔记」PHP 基础

PHP 基础 和 C 与 C++一比,PHP 好方便啊。 基础格式 <?php // 开始 # 相关的代码 ?> // 结束 /*注释 */PHP 代码以 <?php 开始,以 ?> 结束。 变量、作用域 变量 PHP 是一门弱类型语言,因此定义变量…

关于我:新的开始,新的记录

关于我:新的开始,新的记录 大家好,我是 mengzhishanghun 👋 一名普通的Unreal Engine(UE)开发人员。以后,我将把技术文章和开发记录持续更新在博客园,与大家一起学习、交流、成长。所有复杂,皆可封装;所有重复…

关于 NoiLinux 系统和 CodeBlocks 的考场使用

捣鼓了好久呀,网上感觉资料好少,而且好多英文我也看不懂a( 1.首先是文件夹的位置,要保存在主目录而不是桌面,在考场上交的时候就让老师去主目录拷贝就好了吧应该

2025 年知识库应用平台最新推荐排行榜!企业 / 个人 / 协同 / 智能等多场景适配,附权威测评与选择指南

引言 数字化转型加速推动下,知识库应用已成为企业整合资源、提升效率的核心工具,但市场产品同质化严重,选择难度显著增加。本次榜单依托中国软件行业协会 2025 年企业级知识库工具测评报告,采用 “三维九维度” 评…

深入解析:深度学习调参指南:Batch Size的选择策略与实践

深入解析:深度学习调参指南:Batch Size的选择策略与实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consola…

layui静态表格防止被内容撑开变形

layui静态表格防止被内容撑开变形.ellipsis-cell {overflow: hidden;text-overflow: ellipsis;white-space: nowrap; }.fixed-table {table-layout: fixed; }<table class="layui-table fixed-table" lay…

2025 年最新推荐工作服实力厂家排行榜权威发布,助力企业精准挑选优质定制厂商商务 / 车间 / 企业 / 透气工作服厂家推荐

引言 当前工作服市场需求愈发多元,企业不仅要求工作服具备基础穿戴功能,更希望其成为展现品牌形象、传递企业文化的载体。但市场上制造商数量繁杂,质量、工艺、定制能力与服务保障差异显著,部分厂商缺乏专业设计团…

2025年废水处理厂家权威推荐榜单:工业废水、生活污水处理设备及解决方案供应商深度解析

2025年废水处理厂家权威推荐榜单:工业废水、生活污水处理设备及解决方案供应商深度解析 随着环保政策的日益严格和可持续发展理念的深入,废水处理行业正迎来前所未有的发展机遇。工业废水与生活污水处理作为环境保护…

基于Springboot的教学课程管理系统 - 指南

基于Springboot的教学课程管理系统 - 指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "…

深入解析:【从图片到3D几何体/动画】3DMAX像素几何体插件PixelGeometry使用方法

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

你的excel二级三级多级下拉菜单为啥不好用?讲清楚INDIRECT函数用法!

资料: https://support.microsoft.com/zh-cn/office/indirect-%E5%87%BD%E6%95%B0-474b3a3a-8a26-4f44-b491-92b6306fa261本文以office2019 excel 为例。 通俗讲,INDIRECT函数根据参数值在名称管理器中查找已定义名称…

死锁 (Deadlock) 深度解析 - 详解

死锁 (Deadlock) 深度解析 - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco&q…

解压小猫

小花猫世界 - 主页 一只桌面宠物