【题解】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\)

posted @ 2026-04-29 15:21  TallBanana  阅读(9)  评论(0)    收藏  举报