国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

Treap模板【玄學(xué)】

2019-11-11 03:02:55
字體:
供稿:網(wǎng)友

一個很好玩的Treap模板。

#include <cstdio>#include <algorithm>#include <cstdlib>using namespace std;const int maxx = 100000 + 100;int n,m,num,flag,Ans,x,root;struct Node{    int lc,rc;    int fix,v;    int cnt,size;}T[maxx];inline int read(){    int x=0,f=1;char c=getchar();    while(c>'9'||c<'0') {if(c == '-') f=-1; c=getchar();}    while(c>='0'&&c<='9') {x=(x<<1)+(x<<3)+c-'0';c=getchar();}    return x*f;}void update(int i){    T[i].size = T[T[i].lc].size + T[T[i].rc].size + T[i].cnt;}void lturn(int &i){    int t = T[i].rc;    T[i].rc = T[t].lc;    T[t].lc = i;    T[t].size = T[i].size;    update(i);    i = t;}void rturn(int &i){    int t = T[i].lc;    T[i].lc = T[t].rc;    T[t].rc = i;    T[t].size = T[i].size;    update(i);    i = t;}void insert(int &i,int x){    if(i == 0){		num++;		i = num;		T[i].size = T[i].cnt = 1;		T[i].v = x;		T[i].fix = rand();		return;    }    T[i].size++;    if(x == T[i].v) T[i].cnt++;    if(x < T[i].v){		insert(T[i].lc,x);		if(T[T[i].lc].fix < T[i].fix) rturn(i);	}    if(x > T[i].v){		insert(T[i].rc,x);		if(T[T[i].rc].fix < T[i].fix) lturn(i);	}}void remove(int &i,int x){    if(i == 0) return;    if(x > T[i].v)		T[i].size--,remove(T[i].rc,x);    if(x < T[i].v)		T[i].size--,remove(T[i].lc,x);    if(x == T[i].v){		if(T[i].cnt > 1){	    	T[i].size--;	    	T[i].cnt--;	    	return;		}		if(T[i].lc*T[i].rc == 0)	    	i = T[i].lc + T[i].rc;		else if(T[T[i].lc].fix < T[T[i].rc].fix)	    	rturn(i),remove(i,x);		else	    	lturn(i),remove(i,x);    }}int Query_rank(int i,int x){    if(i == 0) return 0;    if(T[i].v == x) return T[T[i].lc].size+1;    if(T[i].v > x) return Query_rank(T[i].lc,x);    if(T[i].v < x) return T[T[i].lc].size + T[i].cnt + Query_rank(T[i].rc,x);}int Query_num(int i,int x){    if(i == 0) return 0;    if(x <= T[T[i].lc].size)		return Query_num(T[i].lc,x);    if(x > T[T[i].lc].size + T[i].cnt)		return Query_num(T[i].rc,x-T[T[i].lc].size-T[i].cnt);    else return T[i].v;}void Query_PRo(int i,int x){    if(i == 0) return;    if(T[i].v < x){		Ans = i;		Query_pro(T[i].rc,x);    }    else Query_pro(T[i].lc,x);}void Query_sub(int i,int x){    if(i == 0) return;    if(T[i].v > x){		Ans = i;		Query_sub(T[i].lc,x);    }    else Query_sub(T[i].rc,x);}int main(){    scanf("%d",&n);    for(int i=1;i<=n;i++){		flag = read();		x = read();		switch(flag){			case 1: insert(root,x);break;			case 2: remove(root,x);break;			case 3: printf("%d/n",Query_rank(root,x));break;			case 4: printf("%d/n",Query_num(root,x)); break;			case 5: Ans = 0;Query_pro(root,x);printf("%d/n",T[Ans].v);break;			case 6: Ans = 0;Query_sub(root,x);printf("%d/n",T[Ans].v);break;			default: printf(">.<");break;		}    }    return 0;}


發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 资兴市| 江口县| 延长县| 龙里县| 三原县| 舞阳县| 筠连县| 呼伦贝尔市| 开阳县| 宣武区| 宜昌市| 托克逊县| 盈江县| 肃宁县| 晋中市| 阿克苏市| 剑川县| 宁河县| 政和县| 仙游县| 工布江达县| 堆龙德庆县| 靖安县| 沅陵县| 台东县| 屏山县| 赤壁市| 自贡市| 尼勒克县| SHOW| 江阴市| 额济纳旗| 闸北区| 丰镇市| 黄大仙区| 广饶县| 宁德市| 绩溪县| 嘉荫县| 双江| 行唐县|