HNOI2004 SBT 寵物收養所

2021-06-13 03:25:00 字數 1258 閱讀 2818

很裸的一道平衡樹的題。

唯一要思考的一點就是

需要維護乙個當前樹的種類,如果當前進來的與樹的種類相同的話,就直接插入,否則就找乙個最接近的的值並把那個值刪除,並記錄答案就行了。

**:

#include#include#define l ch[p][0]

#define r ch[p][1]

#define ll ch[ch[p][0]][0]

#define rr ch[ch[p][1]][1]

#define lr ch[ch[p][0]][1]

#define rl ch[ch[p][1]][0]

using namespace std;

const int inf = 0x3f3f3f3f;

const int mo = 1000000;

const int maxn = 100000;

int ch[maxn][2];

int sz[maxn],val[maxn];

int min,p = 0;

int top = 0,cnt = 0,ret;

int n,kind,root,ans = 0;

void init()

int del(int &p,int key)

else }

void find(int &p,int key)

else if(min > val[p] - key)min = val[p] - key,ret = p;

find(ch[p][key > val[p]],key);

}void rotate(int &p,int f)

void maintain(int &p,bool flag)

else

maintain(l,false);

maintain(r,true);

maintain(p,false);

maintain(p,true);

}void insert(int &p,int key)

sz[p]++;

if(key < val[p])insert(ch[p][0],key);

else insert(ch[p][1],key);

maintain(p,!(key < val[p]));

}void readdata()

else

}} printf("%d",ans);

}int main()

HNOI2004 寵物收養所 SBT

by cxlove 在找前驅和後繼的時候,可能出現前驅和後繼不存在,應當返回inf才對。每於一棵樹,要麼為空,要麼全為寵物或者全為人,加乙個標記,表示樹內現在的種類,對於乙個新進來的,判斷是否一致,一致則插入,否則找出乙個相鄰的刪掉。include include include include d...

HNOI2004寵物收養所

time limit 10 sec memory limit 162 mb submit 2796 solved 995 submit status discuss 最近,阿q開了一間寵物收養所。收養所提供兩種服務 收養被主人遺棄的寵物和讓新的主人領養這些寵物。每個領養者都希望領養到自己滿意的寵物,...

HNOI2004 寵物收養場

凡凡開了一間寵物收養場。收養場提供兩種服務 收養被主人遺棄的寵物和讓新的主人領養這些寵物。每個領養者都希望領養到自己滿意的寵物,凡凡根據領養者的要求通過他自己發明的乙個特殊的公式,得出該領養者希望領養的寵物的特點值a a是乙個正整數,a 2 31 而他也給每個處在收養場的寵物乙個特點值。這樣他就能夠...