開始學習劃分樹······
按照網上的題目大概敲了下···還有些不懂的地方···尤其是查詢···還不是很懂···下次在看懂
下面是這題的**··
#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...