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

qoj 2610 题解

题意

给你 \(n\) 个二维平面上的点,初始你有一个位于 \((0, 0)\) 的退化矩形。每次你可以选择一个点,并将矩形扩张(长、宽不能减小)使得矩形包含这个点,代价为新矩形相对于原矩形多出来的那部分。你需要判断有没有一种方案,使得最终矩形包含所有点且每一步的代价不超过给定的 \(m\)

题解

首先把坐标离散化。考虑在对横坐标扫描线的同时计算。

先明确一些定义:

\(f_{i, j} = 0 / 1\) 表示是否存在一个满足条件的方案使得经过某些操作后,矩形的右上角为 \((i, j)\)

\(p_{i, j}\) 表示所有点 \((a, b)\) 满足 \(a \le i\)\(b \le j\) 中,横坐标的最大值。

\(g_{i, j} = f_{p_{i, j}, j}\)

称一次转移 \(f_{a, b} \to f_{c, d}\)\((a, b)\) 为“输出点”,\((c, d)\) 为“输入点”。

记集合 \(S\) 表示所有横坐标 \(\le i\) 的点的纵坐标组成的集合。

\(q_1 < q_2 < \dots\) 为所有满足横坐标 \(= i\) 的点的纵坐标从小到大排序组成的序列。

则有以下几种转移:

  • 只有横坐标变大。

对于一个在这种情况被转移的 \((i, j)\),他的输入点一定为 \((p_{i, j}, j)\),因为你往左肯定更劣。

显然,\(p_{i, j}\)\(j\) 增加单调不降,则对于相同的 \(p\)\(j\) 构成一个连续段。

又对于这种情况,其代价为 \(j + 2(i - p_{i, j}) \le m\),即 \(j \le m - 2(i - p_{i, j})\),则对于每个连续段,可以转移的只有一段前缀,找出来是容易的。转移只需要将 \(f_{i, j} \to g_{i - 1, j}\)

  • 只有纵坐标变大。

可以发现一个性质:对于每一个可以这么转移的纵坐标对 \((j', j)\),要么不在一个连续段,要么恰好有一个点进行了第一种转移。

证明

考虑反证,假设它们都在一个连续段里。

如果他们都没有进行过第一次转移,那转移肯定没有意义。

如果他们都进行过第一次转移,因为他们在同一个连续段里,则它们在第一种转移的输出点为 \((p_{i, j}, j')\)\((p_{i, j}, j)\)

又,它们的代价为 \(2(j - j') + i > 2(j - j') + p_{i, j}\),则两个输入点也可以进行第二种转移。则在一开始就有 \(f_{i, j'} = f_{i, j}\),转移也没有了意义。


根据这个性质,我们可以得知第二种转移的输出点一定是某个 \((i, q_k)\) 或连续段前缀最上方的 \(1\)(因为下面的一定更劣),总共只有 \(\mathcal{O}(n)\) 个。

转移就是从 \(j\) 开始一直跳 \(S\) 的后继进行转移,直到跳的代价超过 \(m\),可以线段树二分解决,复杂度 \(\mathcal{O}(\log n)\)

  • 横、纵坐标均变大。

则此时的右上角一定是某个 \((i, q_k)\),因为只有 \(n\) 个这样的转移,所以直接暴力转移即可,是容易的。

考虑如何快速计算。我们可以直接抛弃 \(f\),而是只滚动的维护 \(g\)

对于第一种转移,直接将每个连续段的后缀区间赋值成 \(0\) 即可,然后将纵坐标 \(\ge q_1\) 的连续段全部合并成一个 \(i\) 的连续段,类似于一个栈,复杂度显然是 \(\mathcal{O}(n)\) 的。

对于第二种转移,直接对于每个输出点 \((i, j)\),线段树二分找到最远可以跳到的右端点 \(R\),将所有 \(j' \in [j, R]\)\(g_{i, j'} \to [j' \in S]\) 即可。

总复杂度 \(\mathcal{O}(n \log n)\)

代码咕咕咕。

http://www.zskr.cn/news/61946.html

相关文章:

  • P4158 [SCOI2009] 粉刷匠
  • Google 新出的 Antigravity 有哪些新特性?
  • AI元人文实践:家庭旅游规划
  • 畅通工程 小记
  • Linuxの磁盘知识2
  • 大盘风险控制策略分析报告 - 2025年11月26日
  • ASR+TTS - 实践
  • 1. 密码学基础
  • 笔记分享 : 一文读懂3个概念 : RoI, RoI pooling, RoI Align
  • LLM提示注入攻击深度解析:从原理到防御的完整应对方案
  • Ceres Solver优化库学习笔记
  • Flash动画制作总结
  • 第四十九篇
  • 10-数据格式转换
  • 09-国土TXT格式
  • Mac SPSS 26 dmg 安装步骤详解 简单易懂一步步教你装(附安装包)
  • 小程序商城客服系统传递咨询产品信息卡片,传递订单信息卡片
  • 48(11.28)
  • 46(11.26)
  • Python模块与包完全教程:从导入到封装发布(附实战)
  • 【Webpack连载一】入门简介。了解为什么需要Webpack,解决哪些开发中通病 - 实践
  • 借助gdb推进修改oracle scn
  • 2025年11月红外防潮系统,碳红外防潮取暖系统,别墅红外防潮系统厂家推荐:实力防潮品牌解析,采购无忧之选!
  • Ai元人文:谦卑的舞台搭建者——岐金兰与她的未完成之歌
  • 2025年下半年UVLED面光源、UVLED线光源、UV固化箱、UV解胶机、UV固化炉厂家Top 5推荐指南:选购必看榜单
  • 数据破界,价值共生:东软锚定AI时代民生新答卷
  • 2025年下半年UVLED面光源、UVLED线光源、UV固化箱、UV解胶机、UV固化炉厂家综合评测与选购指南
  • 2025年江苏徐州板式家具、模压托盘、桥洞力学板、三聚氰胺饰面板品牌公司综合推荐指南:五大优质厂商深度解析
  • Check Point R82 Gaia - 面向安全应用的下一代操作系统
  • 2025年下半年候车亭、公交站台、电子站牌、公交站牌、公交候车厅选购指南:十大优质供应商推荐