一个复杂度的简单分析
void add (int x, int k) { while (x <= n && k > f[x]) f[x] = k, x += lowbit (x); }
int qry (int x, int y)
{
int res = -1e9;
while (y >= x) {
if (y - lowbit (y) > x) res = max (res, f[y]), y -= lowbit (y);
else res = max (res, z[y]), y--;
}
return res;
}
即树状数组求区间最值。
点加的复杂度是显然的。考虑区间查。
- 减去一
不难发现
感性上这个上界有点松了。但我不太会势能分析。