題意:若干個點,對每個點求能覆蓋住它的線段的權值的第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上這道...