支援:插入x
刪除x(若有多個相同的數,因只刪除乙個)
查詢x的排名(排名定義為比當前數小的數的個數+1。若有多個相同的數,因輸出最小的排名)
查詢排名為x的數
求x的前驅(前驅定義為小於x,且最大的數)
求x的後繼(後繼定義為大於x,且最小的數)
#include#include#include
#include
#include
#include
#include
using
namespace
std;
#define inf 0x7fffffff
#define n 100010
intn,tot,root;
struct
treap
a[n];
int new(int
x)void update(int
p)void
build()
int getrankbyval(int p,int
k)int getvalbyrank(int p,int
rank)
void zig(int &p)
void zag(int &p)
void insert(int &p,int
k)
if(k==a[p].val)
if(kelse
update(p);
}void remove(int &p,int
k)
if(a[p].l||a[p].r)
else
update(p);
}else
p=0;
return
; }
if(kremove(a[p].l,k);
else
remove(a[p].r,k);
update(p);
}int getpre(int
k)
break
; }
if(a[p].vala[ans].val)
ans=p;
if(kp=a[p].l;
else
p=a[p].r;
}return
a[ans].val;
}int getnxt(int
k)
break
; }
if(a[p].val>k&&a[p].valans=p;
if(kp=a[p].l;
else
p=a[p].r;
}return
a[ans].val;
}int
main()
return0;
}
支援普通treap操作,區間翻轉
#include#include#include
#include
#include
#include
using
namespace
std;
#define n 100010
intn,tot,root,m;
bool
flag[n];
struct
treap
}t[n];
void update(int
p)void pushdown(int
p)int merge(int x,int
y)
else
}void split_val(int p,int val,int &x,int &y)
pushdown(p);
if(t[p].val<=val)
x=p,split_val(t[p].ch[1],val,t[p].ch[1
],y);
else
y=p,split_val(t[p].ch[0],val,x,t[p].ch[0
]); update(p);
}void split_k(int p,int k,int &x,int &y)
pushdown(p);
if(t[t[p].ch[0]].sizx=p,split_k(t[p].ch[1],k-t[t[p].ch[0]].siz-1,t[p].ch[1
],y);
else
y=p,split_k(t[p].ch[0],k,x,t[p].ch[0
]); update(p);
}void insert(int
val)
void remove(int
val)
int getrank(int
val)
int getval(int &p,int
k)int getpre(int
x)int getnxt(int
x)void coutt(int
p)int
main()
coutt(root);
while(n--)//
文藝平衡樹
}
#include#include#include
#include
#include
using
namespace
std;
#define n 200010
int m,n,idx,a[n],b[n],cnt[n<<2],u[n],idxx=1
;void pushup(int
p)void update(int l,int r,int k,int
v)
int mid=(l+r)>>1
;
if(v<=mid)
update(l,mid,k
<<1
,v);
if(v>mid)
update(mid+1,r,k<<1|1
,v);
pushup(k);
}int query(int l,int r,int k,int
rank)
intmain()
for(int i=1;i<=n;i++)
scanf("%d
",&u[i]);
sort(b+1,b+m+1
);
int tot=unique(b+1,b+m+1)-b-1
;
for(int i=1;i<=m;i++)
}return0;
}
NOIP學習高階
noip學習的高階大約需要以下幾個階段。第一階段,程式設計基礎,主要內容 1 c 快速入門 程式結構,輸入輸出,變數,表示式,順序,選擇,迴圈三種結構 2 陣列和字串 大量資料處理技術 3 函式 結構化程式設計的主要工具 4 上機除錯技巧等 其中難點主要在多重迴圈,遞迴函式等,要做到自己會編出程式,...
django 高階 模板
模板概述 django處理模板分為兩個階段 檢視呼叫模板 呼叫模板分為三步驟 開啟booktst views.py檔案,呼叫上面定義的模板檔案 from django.http import httpresponsefrom django.template import loader,request...
C 模板高階
模板引數分為類型別形參和非型別形參。類型別形參 出現在模板引數列表中,跟在class或者typename之後類的引數型別名稱。非型別形參 用乙個常量作為類 函式 模板的乙個引數,在類 函式 模板中可將該引數當成常量來使用。注意 通常情況下,使用模板可以實現一些與型別無關的 但一些特殊型別的可能會得到...