【题解】P13242 「2.48sOI R1」你的名字
https://www.luogu.com.cn/problem/P13242
建立 GSAM,则 \(t[l_2,r_2]\) 可以表示成一个节点。
区间查询可以放到线段树上面,这样变成 \(O(\log n)\) 个在线段树节点上的询问:
- 给定 \(u,x\),求 \(\sum_{i=l}^r \mathrm{occ}(s_i,u)\times \min(x,b_i)\)。
- 其中 \(b_i\) 表示该线段树节点内 \(a_i\) 的前缀 min。
先考虑离线处理。
\(b_i\) 不增,那么会有一段前缀取 \(x\) 剩下一段后缀取 \(b_i\)。
出现次数可以对于 \(s_i\) 每个前缀代表的节点都进行链加,\(\times b_i\) 就是带权加。查询是点查。
转置一下变成单点加子树查。
那么这样就是 \(O(n\log^2 n)\)。
在线就是用持久化线段树维护我们的扫描线结果,空间 \(O(n\log^2 n)\)。
空间好像有点炸,考虑设定阈值 \(B\),线段树节点长度 \(\le B\) 的直接暴力,这样复杂度 \(O(q(\log n(\log n-\log B)+B))\),空间 \(O(n\log n(\log n-\log B))\),\(\log B=O(\log\log n)\)。
\(B\) 可以开到 \(\le 2500\)。
浙公网安备 33010602011771号