原題傳送門
給定乙個區間,可以在這個區間上每個整數點插入若干個數(這些數數值可以重複)你需要支援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的值 把區間加操作也按照權值兩邊下放,每次詢問完答案...