P15939 [JOI Final 2026] 传奇团子吃家 题解

思路

考虑前缀和 $P_i$ 表示前 $i$ 段甜减辣的净甜度。则对于固定的左端点,贪心策略为:每口都恰好吃到净甜度增加量 $\ge K$ 的最早位置。这等价于在模 $K$ 意义下推进状态。

我们离线处理询问,按右端点扫描。维护一棵模 $K$ 的权值线段树,存储每个余数状态对应的答案,并利用并查集合并等价状态。遇到奇数段(甜)时执行区间加操作;遇到偶数段(辣)时执行区间合并与删除。

  • 动态开点线段树维护区间加法与单点查询,下标域 $[0, K-1]$。
  • set 维护当前仍有效的模余数集合。
  • 带权并查集维护状态间的差值关系。
  • 扫描 $i$:
    • 若 $i$ 为奇数,计算甜团子带来的增量,执行线段树区间加,并尝试与已有代表合并。
    • 若 $i$ 为偶数,将受辣团子影响的一段余数全部合并到新余数上,并从集合中删除旧余数。
    • 回答所有右端点为 $i$ 的询问。

时间复杂度 $O((N+Q)\log K)$,空间 $O(N\log K)$,可以通过本题。

代码