題目大意:有$n$個位置,$m$個操作。操作有兩種:
$2\;l\;r\;k:$詢問$[l,r]$中第$k$大的數是多少。
題解:樹套樹,權值線段樹套位置線段樹,要標記永久化,不然會$tle$
卡點:沒有標記永久化,$tle$,然後處理$tag$部分寫錯
c++ code:
#include #include #include namespace __ioinline 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 輸出格式 輸出每個詢問的結果 ...