洛谷P3332 ZJOI2013 K大數查詢

2022-05-23 22:18:08 字數 1177 閱讀 9450

題目大意:有$n$個位置,$m$個操作。操作有兩種:

$2\;l\;r\;k:$詢問$[l,r]$中第$k$大的數是多少。

題解:樹套樹,權值線段樹套位置線段樹,要標記永久化,不然會$tle$

卡點:沒有標記永久化,$tle$,然後處理$tag$部分寫錯

c++ code:

#include #include #include namespace __io 

inline int read()

long long x;

inline long long readll() }}

using __io::r::read;

using __io::r::readsign;

using __io::r::readll;

#define maxn 50010

int n, m;

namespace sgt2

int mid = l + r >> 1;

if (l <= mid) __insert(lc[rt], l, mid);

if (r > mid) __insert(rc[rt], mid + 1, r);

} void insert(int &rt, int __l, int __r)

long long __query(const int rt, const int l, const int r)

long long query(int rt, int __l, int __r)

#undef n

}namespace sgt

void insert(int __l, int __r, int __num)

long long pos;

int __query(const int rt, const int l, const int r)

} int query(int __l, int __r, long long __pos)

#undef n

}using sgt::insert;

using sgt::query;

int main() else

} return 0;

}

洛谷 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大數查詢

description 帶區間修求區間第kkk大 資料範圍 n 5 104 n leq 5 times 10 4 n 5 104so luti on solution soluti on字首和套主席樹可以解決靜態 樹狀陣列套主席樹可以解決單點修改區間查詢 貌似在這道題,外層套乙個可以區間修改區間查詢...

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 輸出格式 輸出每個詢問的結果 ...