BZOJ3110 ZJOI2013 k大數查詢

2022-09-18 09:03:36 字數 1085 閱讀 4814

原題傳送門

給定乙個區間,可以在這個區間上每個整數點插入若干個數(這些數數值可以重複)你需要支援2種操作:

1)在[a,b]間所有整數點插入c

2)查詢[a,b]內第c大的數

樹套樹裸題,外層是權值線段樹,內層是普通線段樹,通過將操作1的c離散後維護即可。

總複雜度均為\(o(n\log_^n)\).

#include #include #define uint unsigned int

#define mn 50005

#define getchar() (s==tt&&(tt=(s=bb)+fread(bb,1,1<<15,stdin),tt==s)?eof:*s++)

char bb[1<<15],*s=bb,*tt=bb;

inline int in()int n,q,op[mn],a[mn],b[mn],c[mn],v[mn],rk[mn],cnt,a,b,v;

#define mid (l+r>>1)

struct node

inline void ad(uint l,uint x)

inline void pushdown(int l,int r)

inline void pushup()

};void update(int l,int r,int ad,node *&x)

x->pushdown(l,r);update(l,mid,ad,x->ls);

update(mid+1,r,ad,x->rs);x->pushup();

}uint query(int l,int r,node *&x)

struct node2d

}*root;

#define midd (l+r>>1)

void u(int l,int r,node2d *&x)update(1,n,1,x->val);

}uint q(int l,int r,node2d *x)

inline bool cmp(int a,int b)

void init()

void solve()

}int main()

BZOJ 3110 Zjoi2013 K大數查詢

title bzoj 3110 zjoi2013 k大數查詢 categories bzoj date 2016 2 3 00 00 00 tags 樹套樹,整體二分 有n個位置,m個操作。操作有兩種,每次操作如果是1 a b c的形式表示在第a個位置到第b個位置,每個位置加入乙個數c 如果是2 a...

BZOJ 3110 Zjoi2013 K大數查詢

title bzoj 3110 zjoi2013 k大數查詢 categories bzoj date 2016 2 3 00 00 00 tags 樹套樹,整體二分 有n個位置,m個操作。操作有兩種,每次操作如果是1 a b c的形式表示在第a個位置到第b個位置,每個位置加入乙個數c 如果是2 a...

BZOJ3110 Zjoi2013 K大數查詢

整體二分 樹狀陣列 這道題和某題類似 整體二分,每次二分乙個值,因為是求第k大,比二分值大的在 l r 區間 1,詢問就問這個區間的數,如果數量大於k,說明實際答案大於二分值,下放右區間,否則下放左區間,k減去詢問的值 因為後面不會再考慮mid r的值 把區間加操作也按照權值兩邊下放,每次詢問完答案...