POJ 2104 K th Number 整體二分

2021-08-02 08:33:44 字數 1160 閱讀 5116

給定乙個長度為n的序列,每次求出乙個給定區間內的第k小數

之前用很多方法寫這道題了,今天用整體二分寫了一次

#include 

#include

#include

#include

#include

using namespace std;

typedef long long ll;

const int n = 100000 + 10, m = 5000 + 10;

struct bit

void add(int i, int

x)

int sum(int i)

} bit;

struct node

} q[n+m], ql[n+m], qr[n+m];

int a[n], ans[m];

void divide_conquer(int st, int en, ll l, ll r)

ll mid = (l + r) >> 1;//這個地方寫成(l+r)/2可能會莫名re

int kl = 0, kr = 0;

for(int i = st; i <= en; i++)

else

qr[kr++] = q[i];

}else}}

for(int i = 0; i < kl; i++)

if(ql[i].type == 1) bit.add(ql[i].id, -ql[i].y);

for(int i = 0; i < kl; i++) q[st+i] = ql[i];

for(int i = 0; i < kr; i++) q[st+kl+i] = qr[i];

divide_conquer(st, st + kl - 1, l, mid);

divide_conquer(st + kl, en, mid + 1, r);

}int main()

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

divide_conquer(1, tot, int_min, int_max);

for(int i = 1; i <= m; i++) printf("%d\n", ans[i]);

}return

0;}

劃分樹學習 poj 2104

開始學習劃分樹 按照網上的題目大概敲了下 還有些不懂的地方 尤其是查詢 還不是很懂 下次在看懂 下面是這題的 include include includeusing namespace std int const tcnt 100100 struct node tree tcnt 4 int a ...

主席樹模板 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...