单调队列
CF1904D
任意次选择一个子区间 ,全部替换为子区间的最大值。判断是否可以通过若干次操作将数组 变为数组 。
对于每一个 ,判断能否在 中 找到一个相等的元素 ,且 和 之间的所有 都满足 ,且 。
这等价于 ,且 。
因此需要维护一个递减的队列,如果 ,则淘汰 。同时,如果 ,需要淘汰队头的 。
1 | std::vector<int> cnt(N, 0); |
本部落格所有文章除特別聲明外,均採用CC BY-NC-SA 4.0 授權協議。轉載請註明來源 小明の雜貨屋!
評論
任意次选择一个子区间 ,全部替换为子区间的最大值。判断是否可以通过若干次操作将数组 变为数组 。
对于每一个 ,判断能否在 中 找到一个相等的元素 ,且 和 之间的所有 都满足 ,且 。
这等价于 ,且 。
因此需要维护一个递减的队列,如果 ,则淘汰 。同时,如果 ,需要淘汰队头的 。
1 | std::vector<int> cnt(N, 0); |