BZOJ2161 布娃娃(掃瞄線 線段樹)

2021-07-12 05:22:57 字數 1019 閱讀 7565

題意:若干個點,對每個點求能覆蓋住它的線段的權值的第k大。

正解顯然掃瞄線+線段樹,把每個線段拆成起點和終點,代表插入和刪除,線段樹維護第k大權值就好了。。

#include#include#include#include#define rep(i,a,b) for(int i=a;i<=b;++i)

#define erp(i,a,b) for(int i=a;i>=b;--i)

using namespace std;

const int maxn = 100005;

const int mo = 19921228;

int n;

int p[maxn], c[maxn], l[maxn], r[maxn];

int dat[maxn], dn;

void genarr(int*a)

struct doll

doll (int q,int w,int e,int f) : t(q),c(w),tp(e),k(f){}

bool operator < (const doll&b) const

} q[maxn*3];

int qn;

#define lch(a) tr[a].lch

#define rch(a) tr[a].rch

struct node tr[maxn*4];

int ncnt, root;

void ins(int&x, int v, int l=1, int r=dn)

void del(int x, int v, int l=1, int r=dn)

int getkth(int x, int k, int l=1, int r=dn)

int solve()

return ans;

}int main()

int ans = solve();

printf("%d\n", ans);

return 0;

}

BZOJ 2161 布娃娃 主席樹

題面 想了乙個主席樹做法 我們把每個區間的兩個端點拆開 對 l,r 分別從小到大排序,分別從左到右依次把對應標號的 c 插入到權值主席樹里 每次查詢 p 在排序後的 l,r 陣列上分別二分找到第乙個小於等於 p 的位置 那麼 l,r 的主席樹相減之後就是能對 p 產生貢獻的區間 在主席樹上二分即可 ...

zzuil2161 考試 貪心

time limit 1 sec memory limit 128 mb submit 96 solved 15 submit status web board dml 去考試,有 n 個題目,每道題目有乙個分數,答對的話就得到這道題的分數,然後 dml 有乙個計分器,每次得分後都會在計分器上面加上...

洛谷2161 會場預約 題解

好吧,用stl水過了一道題。顯然,每一次進行修改之前的所有預約一定是沒有互相覆蓋的。我們用set保留所有的預約,這樣在詢問時只要輸出set的size就行了 對於每次的新預約,我們就先找到右端點大於該區間左端端點的區間,然後乙個乙個刪除矛盾的預約就行了 複雜度大概為o n logn 2 bzoj上這道...