1. 程式人生 > 實用技巧 >優美的暴力——莫隊

優美的暴力——莫隊

普通莫隊

不是很想講,所以去網上找找吧,有時間補充。

帶修莫隊

多了一個修改的操作,(應該是單點修改,窩還沒見過區間修改的),改了一個點可以當做將一個數移除並加入了一個數,類似普通莫隊也可以暴力來做。

回滾莫隊

在當前已知的區間中要加入元素或移除元素來得到新的答案,可能其中一種操作很難做到 \(O(1)\)

那麼就想到都變成一種操作。對於一個塊內的 \(O(\sqrt n)\) 來統計答案。

如果移除元素不好做就按下面的方式排序

struct query {
    int x, y, id;
    friend bool operator < (query q1, query q2) {
        if (num[q1.x] != num[q2.x]) return num[q1.x] < num[q2.x];
        return q1.y < q2.y;
    }
}q[MAXN];

詢問的左端點和右端點不在一個塊內的話,對於左端點在同一塊內的這一型別的詢問,右端點一定遞增,左端點左端點所在的塊暴力計算 \(O(\sqrt n)\),右端點的可以繼承所以是 \(O(n)\)
如果加入元素不好做也類似上面的。

樹上莫隊

用尤拉序將樹上變成序列上

想不到這麼短吧,有時間再改