題目:靜態查詢區間第k大.
主席樹入門題目,之前看的很多資料一上來就是動態區間第k大,看得很費勁,後來找了個寫得清晰的,感覺靜態的還不算難,**也不長.
/*view code* @author: cwind
*///
#pragma comment(linker, "/stack:102400000,102400000")
#include #include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using
namespace
std;
#define ios std::ios::sync_with_stdio (false);std::cin.tie(0)
#define pb push_back
#define pb pop_back
#define bk back()
#define fs first
#define se second
#define sq(x) (x)*(x)
#define eps (1e-6)
#define iinf (1<<29)
#define linf (1ll<<59)
#define inf (1000000000)
#define finf (1e3)
#define clr(x) memset((x),0,sizeof (x));typedef
long
long
ll;typedef unsigned
long
long
ull;
typedef pair
pii;
typedef pair
p;const
int maxn=3e6;
const
int maxlen=1e5+300
;struct
node
}t[maxn];
int sz=0
;int
d[maxlen],a[maxlen];
void insert(int &n,int l,int r,int
x)int query(int i,int j,int l,int r,int
k)int
n,m;
introot[maxlen];
intmain()
sort(d,d+n);
for(int i=0;i)
while(m--)
return0;
}
主席樹入門 模板 POJ 2104
查詢區間第k大,而且沒有修改。主席樹的原理就是在現有的一顆線段樹上不斷加入新的節點,而加入的對於現有線段樹的影響另開一條鏈記錄下來,這樣我們就可以儲存線段樹的歷史版本,在查詢時只需要把區間減一下就可以了。include include include using namespace std cons...
主席樹模板 POJ2104
離散化 對陣列排完序後用unique去重,unique返回的是去重後的陣列的末位址,減去第乙個元素的位址就能得到去重後的陣列大小,用lower bound查詢原數字在排序去重後的序列中的位序,用位序代替數字完成離散化。include include using namespace std defin...
主席樹模板(poj2104)
主席樹是可持久化線段樹,可以記錄線段樹的歷史版本。中和線段樹不同的是,l,r記錄的是左右子樹編號,因為普通的線段樹版本中,左右子樹自然就是o 1和o 1 1,但是主席樹中並不保證這個特性,所以需要記錄一下。是 include include include include include using...