洛谷P3332 ZJOI2013 K大數查詢

2021-09-22 22:27:25 字數 2769 閱讀 1883

description

帶區間修求區間第kkk大

資料範圍:n≤5

×104

n\leq 5\times 10^4

n≤5×104so

luti

on

solution

soluti

on字首和套主席樹可以解決靜態

樹狀陣列套主席樹可以解決單點修改區間查詢

貌似在這道題,外層套乙個可以區間修改區間查詢的資料結構不就行了嗎?

是的!!!

線段樹套主席樹就可以解決這題,超級樹狀陣列套主席樹也可以解決,本人用的是前者,時間和空間複雜度都是o(n

log2

n×兩棵

線段樹的

常數

)o(nlog^2n\times 兩棵線段樹的常數)

o(nlog

2n×兩

棵線段樹

的常數)

離線演算法的話可以用整體二分做,不過本人不會。

如果對**有看不懂的地方,煩請閱讀關於線段樹操作的一些記錄 cod

e1

code1

code

1,在值上建

#include

#include

#include

#define n 50005

using

namespace std;

int n,op,l,r,k;

inline

intread()

inline

void

write

(int x)

inline

void

print

(int x)

struct position_segment_tree

int mid=l+r>>1;

if(ql<=mid)

add(ls[k]

,l,mid,ql,qr);if

(qr>mid)

add(rs[k]

,mid+

1,r,ql,qr)

;return;}

inline

intask

(int k,

int l,

int r,

int ql,

int qr,

int t=0)

}pst;

struct data_segment_tree

inline

intask

(int k,

int l,

int r,

int ql,

int qr,

int rk)

#undef lson

#undef rson

}dst;

signed

main()

else

}}

c od

ecode

code

以下標建(離散化)

#include

#include

#include

#define n 50005

using

namespace std;

int n,m,op[n]

,l[n]

,r[n]

,k[n]

,b[n]

,totn;

inline

intread()

inline

void

write

(int x)

inline

void

print

(int x)

struct position_segment_tree

int mid=l+r>>1;

if(ql<=mid)

add(ls[k]

,l,mid,ql,qr);if

(qr>mid)

add(rs[k]

,mid+

1,r,ql,qr)

;return;}

inline

intask

(int k,

int l,

int r,

int ql,

int qr,

int t=0)

}pst;

struct data_segment_tree

inline

intask

(int k,

int l,

int r,

int ql,

int qr,

int rk)

#undef lson

#undef rson

}dst;

signed

main()

sort

(b+1

,b+totn+1)

; totn=

unique

(b+1

,b+totn+1)

-b-1

;for

(register

int i=

1;i<=m;i++)if

(op[i]==1

) k[i]

=lower_bound

(b+1

,b+totn+

1,k[i]

)-b;

for(

register

int i=

1;i<=m;

++i)

}

洛谷 P3332 ZJOI2013 K大數查詢

題目 k大數查詢 思路 整體二分。維護兩個區間 l,r 和 l,r 分別代表二分的答案區間,和可以滿足答案的詢問區間。在 l,r 上二分m。對於1操作,如果v小於m,在 q.l,q.r 上用線段樹實現區間加一,值賦1,否則賦0。對於2操作,詢問 q.l,q.r 上的數的個數s,若v小於等於s,值賦1...

洛谷P3332 ZJOI2013 K大數查詢

題目大意 有 n 個位置,m 個操作。操作有兩種 2 l r k 詢問 l,r 中第 k 大的數是多少。題解 樹套樹,權值線段樹套位置線段樹,要標記永久化,不然會 tle 卡點 沒有標記永久化,tle 然後處理 tag 部分寫錯 c code include include include name...

P3332 ZJOI2013 K大數查詢

有n個位置,m個操作。操作有兩種,每次操作如果是1 a b c的形式表示在第a個位置到第b個位置,每個位置加入乙個數c如果是2 a b c形式,表示詢問從第a個位置到第b個位置,第c大的數是多少。輸入格式 第一行n,m接下來m行,每行形如1 a b c或2 a b c 輸出格式 輸出每個詢問的結果 ...