2024.12.30 LGJ Round

A

有一个长度为 \(n\) 的序列,给你 \(m\) 个区间,你需要对每个 \(B\) 求若将 \(B\) 设为块长,并用分块处理这些区间需要进行多少次运算。\(n,m\le 10^6\)

不在一个块内的区间的贡献可以分到其端点处,这样就只需考虑两端点在一个块内的贡献。
把每个块长分成的区间求出来 \(n\ln n\) 个,然后二维数点。
据说可以平衡为 \(O(n\ln n\log n/\log \log n)\),但不会。

B

维护一个长度为 \(n\) 的序列。\(q\) 次单点修改,修改完查询所有长度为 \(k\) 的子区间中,最大值+次大值的和最大是多少。\(n\le 10^6,q\le 10^5\)

转化题意变成求距离不超过 \(k-1\) 的两个数的和的最大值。
如果每次修改加的是正数,那么我们直接钦定其为最大值或次大值中的一个。
只需要算距离不超过 \(k-1\) 的最大值加起来更新答案,问题是修改是可以任意修改。
我们的问题是无法删除贡献。所以对时间这维线段树分治,每次加入一个点就相当于修改加一个正数。

posted @ 2024-12-30 22:04  s1monG  阅读(16)  评论(0)    收藏  举报