CF2121H Ice Baby
官方题解精妙做法的另一种理解。
设
显然
- 区间
[l_i,r_i] 加1 - 取前缀
\max
第二步等价于用
可以用线段树做,不过有更好的维护方式。
考虑用 multiset 维护
于是上述操作等价于,将第一个比
时间复杂度
AC record
il void solve() {
read(n); multiset <int> dp;
rep1(i, 1, n) {
int l, r; read(l, r);
auto it = dp.upper_bound(r);
if (it != end(dp)) dp.erase(it);
dp.emplace(l); cout << dp.size() << ' ';
} puts("");
}
int main() {
for (int T = read(); T--; ) solve();
return 0;
}