菜鳥系列 劃分樹

2021-07-03 08:41:35 字數 2249 閱讀 8527

做回菜鳥,老老實實重新學起:資料結構;

求k大值及左右和模版:

#define n 123456

int sorted[n]=; //對原集合中元素排序後的值

int val[20][n]=; //val記錄第k層當前位置的值

int num[20][n]=; //記錄元素所在區間當前位置前的元素進入到左子樹的個數

int lnum, rnum; //詢問區間裡面k-th數左側和右側的數的個數

long long sum[20][n]=; //記錄比當前元素小的元素的和

long long lsum, rsum; //詢問區間裡面k-th數左側數之和與右側數之和

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

else

if (val[d][i] > sorted[mid]) else if (val[d][i] < sorted[mid])

val[d+1][rp++] = val[d][i];

else else val[d+1][rp++] = val[d][i];}}

build(l, mid, d+1);

build(mid+1, r, d+1);

}int query(int a, int b, int k, int l, int r, int d)

else

if (s >= k)

else

}bool cmp(int a,int b)

void solve(int n,int m)

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

printf("\n");

sort(sorted+1,sorted+1+n,cmp);

build(1,n,0);

int x,y,k,res;

while(m--)

}

題目參考:

poj 2104 k-th number

題意:求區間內k小值;

思路:直接劃分樹,求第k小值;

code:

#define n 123456

int sorted[n]=;

int val[20][n]=;

int num[20][n]=;

int lnum, rnum;

long long sum[20][n]=;

long long lsum, rsum;

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

else

if (val[d][i] < sorted[mid]) else if (val[d][i] > sorted[mid])

val[d+1][rp++] = val[d][i];

else else val[d+1][rp++] = val[d][i];}}

build(l, mid, d+1);

build(mid+1, r, d+1);

}int query(int a, int b, int k, int l, int r, int d) else

if (s >= k) else

}bool cmp(int a,int b)

;int val[20][n]=;

int num[20][n]=;

int lnum, rnum;

long long sum[20][n]=;

long long lsum, rsum;

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

else

if (val[d][i] < sorted[mid]) else if (val[d][i] > sorted[mid])

val[d+1][rp++] = val[d][i];

else else val[d+1][rp++] = val[d][i];}}

build(l, mid, d+1);

build(mid+1, r, d+1);

}int query(int a, int b, int k, int l, int r, int d)

else

if (s >= k)

else

}bool cmp(int a,int b)

printf("\n");

}int main()

return 0;

}

菜鳥系列 字典樹

做回菜鳥,老老實實重新學起 動態模版 動態鍊錶實現 define maxn 26 struct node node root 字典樹建立 void createtrie char str else 查詢 int findtrie char str return p v 返回以此為字首的串的數量 釋放...

菜鳥系列 最小生成樹

菜鳥就要老老實實重新學起 prim 遍歷所有點,找到最近的點加入樹中,更新距離陣列dist 鄰接矩陣存圖。模版 define n 1010 bool vis n int g n n dist n int prim int n return res 鄰接表存圖,公升序排列所有邊,並查集維護點集合,遍歷...

整數劃分系列

描述 將正整數n表示成一系列正整數之和 n n1 n2 nk,其中n1 n2 nk 1,k 1。正整數n的這種表示稱為正整數n的劃分。求正整數n的不 同劃分個數。例如正整數6有如下11種不同的劃分 6 5 1 4 2,4 1 1 3 3,3 2 1,3 1 1 1 2 2 2,2 2 1 1,2 1...