昨天還覺得劃分樹很難,看了一眼別人的**覺得好長然後覺得很沒法下手!今天早上起床還是很耐心的研讀了大牛的**,哈哈,原來也不過如此嗎!線段樹和歸併排序的結合,建議大家以後遇到不會的題一定要有耐心,不然就真的學不會了!
#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;
#define rep(i,n) for(int i=0; i=(m); --i)
#define ll long long
#define arc(a) ((a)*(a))
#define inf 100000
#define exp 0.000001
#define n 100005
#define m 20
int a[n];
int aleft[m][n];
int tree[m][n];
int n,m;
void bulidtree(int l,int r,int dep)
int mid=(l+r)/2;
int lsame=l-1;
int x=a[mid];
repf(i,l,r) if(tree[dep][i]=k)
else }
int main()
} return 0;
}
hdu2665(主席樹模板題)
求區間第 k 小。參考這類題目做法挺多的,例如 劃分樹。這裡使用主席樹再寫一發,不得不說主席樹相比而言要好寫的多,比起普通線段樹,主席樹就是復用了線段樹共有的資訊。可持久化資料結構講究的就是復用共有的資訊,可持久化 trie 的思想也是差不多的。includeusing namespace std ...
hdu2665 主席樹模板題
題目 區間k大值,區間極值很容易想到線段樹,如果k是個位數的話,可以考慮開k個域的線段樹 滾 又稱可持久化線段樹,函式式線段樹 也許是上面兩個字看的太長,同時主席兩字給人一種不明覺厲的感覺,so,嘿嘿嘿 關於主席樹的講解可以看這 先離散化,對每個點i,建乙個1 i的線段樹 大小是數字的個數 記錄該字...
hdu2665 可持續化線段樹
a的第一道可持續化線段樹。我是看這個看懂的 可持續化線段樹,主要思想就是利用歷史資訊,減少時間和記憶體花銷。比方有兩棵線段樹,但是他們只有乙個節點資訊不同。仔細一想,在這兩顆線段樹上,對應的 l,r 節點 只有log n 個節點不同。那麼,除了不同的節點,其他節點資訊,他們完全可以共用。關於這題解法...