CF869E The Untended Antiquity
若两个点在同一个矩形中,其可互相到达。等价于若包含两个点的矩形集合相同,两点可互相到达。但是维护集合太过困难,所以考虑给集合赋随机权值进行 hash,则相当于矩形异或,单点求值。使用二维树状数组即可。
P5524 [Ynoi2012] NOIP2015 充满了希望
先考虑第 \(q\) 次操作为查询 \(x\) 位置的值,则可以从第 \(q\) 次操作往前推,遇到交换两个数若包含 \(x\) 就交换,遇到区间赋值的时候若包含 \(x\) 就代表 \(x\) 最终的值,同时其有值的条件为询问的操作区间左端点需要小于等于当前操作。但是从每个 \(3\) 询问向前推复杂度太大,而从前向后推是等价的,所以只需要维护每个位置最后一次被赋值所在的操作数即可,线段树维护。
现在有若干个三元组 \((l,r,v)\) 表示若询问的操作区间 \(L \le l \land R \ge r\),则该三元组贡献为 \(v\),即二位数点。离线下来即可。
P14761 [Opoi 2025] CCD 的序列
发现询问等价于求出 \([l,r]\) 中有多少未在区间内匹配的括号数,将括号视为 \(+1,-1\) 序列,求出其前缀和,则答案为 \(sum_{l-1} - \min_{i=l-1}^r sum_i + sum_r - \min_{i=l-1}^r sum_i\),前者为剩下左括号数量,后者为剩下右括号数量。由于带插入操作,所以平衡树维护即可。
P11660 我终将成为你的倒影
首先 \(a \leftarrow a \bmod b\),则 \(a,b \le 500\)。而 \(500\) 接近 \(\sqrt{n}\),考虑根号数据结构。
考虑分块求解,散块是容易的,难点为整块。考虑暴力枚举 \(b\),对于每个点,其合法的 \(a\) 均为一段区间,可以使用差分直接加到其对应的整块上,然后做前缀和即可。时间复杂度 \(O(m(S+\dfrac{n}{S})+Bn+B^2\dfrac{n}{S})\),其中 \(S\) 为块长,\(B\) 为 \(b\) 值域。平衡一下得到 \(S=B\)。空间复杂度为 \(B^2 \dfrac{n}{S}\)。
