求區間第 k 小。
參考這類題目做法挺多的,例如 劃分樹。
這裡使用主席樹再寫一發,不得不說主席樹相比而言要好寫的多,比起普通線段樹,主席樹就是復用了線段樹共有的資訊。
可持久化資料結構講究的就是復用共有的資訊,可持久化 trie 的思想也是差不多的。
#includeusing namespace std;
#define lson l, m
#define rson m + 1, r
const int maxn = 1e5 + 10;
int l[maxn << 5], r[maxn << 5], sum[maxn << 5];
int tot;
int a[maxn], f[maxn], h[maxn];
int build(int l, int r)
return rt;
}int update(int pre, int l, int r, int x)
return rt;
}int query(int ql, int qr, int l, int r, int k)
int main()
sort(h + 1, h + 1 + n);
int d = unique(h + 1, h + 1 + n) - h - 1;
f[0] = build(1, d);
for(int i = 1; i <= n; i++)
while(m--)
}return 0;
}
hdu2665 主席樹模板題
題目 區間k大值,區間極值很容易想到線段樹,如果k是個位數的話,可以考慮開k個域的線段樹 滾 又稱可持久化線段樹,函式式線段樹 也許是上面兩個字看的太長,同時主席兩字給人一種不明覺厲的感覺,so,嘿嘿嘿 關於主席樹的講解可以看這 先離散化,對每個點i,建乙個1 i的線段樹 大小是數字的個數 記錄該字...
hdu2665 主席樹(可持久化線段樹)
題意 給定乙個陣列,每次查詢第l到r區間的第k大值 經過這題總算對可持久化線段樹有了些了解,我們開始先建一顆空樹,然後對於每次修改我們只會修改logn個點,我們可以新建logn個來避免每次都新建一顆線段樹導致的爆空間,對於這題來說我們線段樹中維護的是這個區間的點的個數,插入的時候按權值大小插入,對於...
hdu 2665 劃分樹裸題
昨天還覺得劃分樹很難,看了一眼別人的 覺得好長然後覺得很沒法下手!今天早上起床還是很耐心的研讀了大牛的 哈哈,原來也不過如此嗎!線段樹和歸併排序的結合,建議大家以後遇到不會的題一定要有耐心,不然就真的學不會了 include include include include include inclu...