劃分樹學習 poj 2104

2021-06-16 09:45:27 字數 722 閱讀 8878

開始學習劃分樹······

按照網上的題目大概敲了下···還有些不懂的地方···尤其是查詢···還不是很懂···下次在看懂 

下面是這題的**··

#include#include#includeusing namespace std;

int const tcnt = 100100;

struct node

tree[tcnt*4];

int a[tcnt],deep[20][tcnt],num_left[20][tcnt];

void build(int id,int l,int r,int d)

else

deep[d+1][rpos++] = deep[d][i];

}build(id<<1,l,mid,d+1);

build(id<<1|1,mid+1,r,d+1);

}int find_rank(int id,int l,int r,int d,int val)

}int main()

{ int n,m,l,r,val;

while(~scanf("%d%d",&n,&m))

{for(int i=1;i<=n;i++)

scanf("%d",&deep[1][i]),a[i] = deep[1][i];

sort(a+1,a+n+1);

build(1,1,n,1);

for(int i=0;i

poj2104 劃分樹問題

這個題目的意思是給你乙個區間,讓你找到在某個給出的子區間當中第k大的數。這是我的第乙個劃分樹題目,因為之前做了好多線段樹的題目了,看了看書上基本的 然後按照自己的思路寫了出來。按照這個題目的思路,得用到二分,把給出的元素x n 排好序y n 對於乙個給出的子區間,那麼第k大的元素應該滿足兩點 1 在...

主席樹模板 POJ2104

離散化 對陣列排完序後用unique去重,unique返回的是去重後的陣列的末位址,減去第乙個元素的位址就能得到去重後的陣列大小,用lower bound查詢原數字在排序去重後的序列中的位序,用位序代替數字完成離散化。include include using namespace std defin...

主席樹模板(poj2104)

主席樹是可持久化線段樹,可以記錄線段樹的歷史版本。中和線段樹不同的是,l,r記錄的是左右子樹編號,因為普通的線段樹版本中,左右子樹自然就是o 1和o 1 1,但是主席樹中並不保證這個特性,所以需要記錄一下。是 include include include include include using...