題目:
無法忍受了,我要寫主席樹!
解決區間第 k 大查詢問題,可以用主席樹,像字首和一樣建立 n 棵字首區間的權值線段樹;
然後 n 棵線段樹可以共用一些節點;
線段樹的 sum 可以相減,利用這個查詢即可;
什麼嘛,主席樹也沒我想得那麼難(蠻簡單的)!
**如下:
#include#include#include
#include
using
namespace
std;
intconst maxn=2e5+5
;int n,m,q,t[maxn],ls[maxn<<5],rs[maxn<<5],sum[maxn<<5
],cnt,a[maxn],b[maxn];
//注意陣列範圍,每次新增log(m)個點
int build(int l,int
r)
return
rt;}
int update(int pre,int l,int r,int
x)
return
rt;}
int query(int u,int v,int l,int r,int
k)int
main()
sort(b+1,b+n+1
); m=unique(b+1,b+n+1)-b-1
; t[
0]=build(1
,m);
for(int i=1;i<=n;i++)
for(int i=1,l,r,x;i<=q;i++)
return0;
}
可持久化線段樹模板 解釋(洛谷 P3834)
模板鏈結 可持久化線段樹是一種可持久化結構,需要知道的前導知識有 線段樹 權值線段樹 離散化 線段樹的動態開點。說實話,當蒻苟我做了那麼多 的線段樹後發現,可持久化線段樹 僅限模板 還是很好寫的。什麼叫可持久化?可以想象,有乙個線段樹,他除了可以進行普通的查詢修改操作,還可以記錄歷史版本,即,我們可...
洛谷 P3834 可持久化線段樹 2(主席樹)
因為太菜了,所以也不知道這題的演算法到底應該叫做什麼,看hzw部落格中把這題歸到主席樹了,那我也歸到主席樹里吧。其實我連主席樹定義都不知道 include using namespace std const int n 2e5 5 int n,q,m,x,y,t,cnt int a n b n ll...
P3834 可持久化線段樹(主席樹)入門
include using namespace std define ll long long define mem a,b memset a,b,sizeof a define inf 0x3f3f3f3f define dbg printf this is a input n define fi...