专栏文章

时隔两年。

P14426题解参与者 2已保存评论 1

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
1 条
当前快照
1 份
快照标识符
@mincswet
此快照首次捕获于
2025/12/02 00:18
3 个月前
此快照最后确认于
2025/12/02 00:18
3 个月前
查看原文
大家好,我喜欢暴力数据结构,于是使用分块 AC 了此题。
给出 nn 个点 (xi,yi)(x_i,y_i),保证 xi,yix_i,y_i 互不相同。求有多少个二元组 (i,j)(i,j),满足 xi<xjyi<yjx_i<x_j\land y_i<y_j 且不存在 kk 使得 xi<xk<xjyi<yk<yjx_i<x_k<x_j\land y_i<y_k<y_j
n2×105n\le 2\times 10^5
先离散化。这样横纵坐标都变成 1n1\sim n 的排列。因此相当于平面上有 nn 个点 (i,pi)(i,p_i)
那么 (i,j)(i,j) 这个二元组合法,当且仅当:
  • i<ji<j
  • pi<pjp_i<p_j
  • k(i,j),pk<pipk>pj\forall \,k\in(i,j),p_k<p_i\lor p_k>p_j
对于一个 ii,记能与其产生贡献的 jj 从小到大依次为 w1,,wmw_1,\dots,w_m。记 SSpj>pip_j>p_iii 构成的集合。容易发现:
  • w1w_1SS 中最小的 jj,使得 j>ipj>pij>i\land p_j>p_i
  • 对于 2um2\le u\le mwuw_uSS 中最小的 jj,使得 j>wu1pj<pwu1j>w_{u-1}\land p_{j}<p_{w_{u-1}}
可以先证明 ww 中的点都能与 ii 产生贡献,再证明不在 ww 中的点都不能与 ii 产生贡献。这个结合偏序关系很容易得出。
这启示我们按照 pip_i 从大到小扫,同时维护 SS。记 nxti\text{nxt}_i 为最小的 jj 使得 j>ipj>pij>i\land p_j>p_i,这个单调栈扫一遍即可。由于扫到 pip_i 时,nxti\text{nxt}_i 一定被加入 SS 中。所以 w1=nxtiw_1=\text{nxt}_i。再记 qiq_i 表示 SS 中最小的 jj 使得 j>ipj<pij>i\land p_j<p_i。考虑这样一个暴力:从 j=nxtij=\text{nxt}_i 开始,检查是否合法,再 jqjj\leftarrow q_j
考虑优化,很难不想到弹飞绵羊。以 B=O(n)B=\mathcal{O}(\sqrt n) 为块长分块。维护 fi,gif_i,g_i 表示从 ii 开始跳出所在块到达的位置和跳的次数(包含 ii 但不包含 fif_i)。那么对于每个点就从 j=nxtij=\text{nxt}_i 开始,每次令答案加上 gjg_j,再令 jfjj\leftarrow f_j
考虑向 SS 中加入 ii 后会带来怎样的影响。首先是对 qq 的影响,相当于区间 [1,i1][1,i-1] 内的 qjq_j 要对 iimin\min。对于 ii 所在块内的 f,gf,g,直接重构即可,倒着扫这个块,每个 jj 的信息从 qjq_j 转移。块内每个点需要单点查询 qq,总共 O(nn)\mathcal{O}(n\sqrt n) 次。因此用一个 O(n)O(1)\mathcal{O}(\sqrt n)-\mathcal{O}(1) 的分块维护 qqii 右边的块的 f,gf,g 不受影响。至于 ii 左边的块,可以发现块中的位置在块内跳的过程是不受影响的,跳出块这一步会受到 ii 的影响,因此是 ff 数组区间对 iimin\mingg 不受影响。同样使用 O(n)O(1)\mathcal{O}(\sqrt n)-\mathcal{O}(1) 的分块维护。
时间复杂度 O(nn)\mathcal{O}(n\sqrt n),空间复杂度 O(n)\mathcal{O}(n)
闲话:上一次见到这个题是在 2023 年的 xyd 模拟赛,当时完全没思路。现在还是不会 polylog 做法。不同的是当时一切仍未开始,现在一切已经结束。人生有梦,各自精彩。

评论

1 条评论,欢迎与作者交流。

正在加载评论...