給定乙個長度為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...