NOIP的基本模板高階

2022-08-18 06:57:17 字數 3337 閱讀 5340

支援:插入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之後類的引數型別名稱。非型別形參 用乙個常量作為類 函式 模板的乙個引數,在類 函式 模板中可將該引數當成常量來使用。注意 通常情況下,使用模板可以實現一些與型別無關的 但一些特殊型別的可能會得到...