BZOJ 1208 HNOI2004 寵物收養所

2022-04-30 05:09:10 字數 2191 閱讀 5371

bzoj_1208_[hnoi2004]寵物收養所_splay

最近,阿q開了一間寵物收養所。收養所提供兩種服務:收養被主人遺棄的寵物和讓新的主人領養這些寵物。每個領養者都希望領養到自己滿意的寵物,阿q根據領養者的要求通過他自己發明的乙個特殊的公式,得出該領養者希望領養的寵物的特點值a(a是乙個正整數,a<2^31),而他也給每個處在收養所的寵物乙個特點值。這樣他就能夠很方便的處理整個領養寵物的過程了,寵物收養所總是會有兩種情況發生:被遺棄的寵物過多或者是想要收養寵物的人太多,而寵物太少。 1. 被遺棄的寵物過多時,假若到來乙個領養者,這個領養者希望領養的寵物的特點值為a,那麼它將會領養乙隻目前未被領養的寵物中特點值最接近a的乙隻寵物。(任何兩隻寵物的特點值都不可能是相同的,任何兩個領養者的希望領養寵物的特點值也不可能是一樣的)如果有兩隻滿足要求的寵物,即存在兩隻寵物他們的特點值分別為a-b和a+b,那麼領養者將會領養特點值為a-b的那只寵物。 2. 收養寵物的人過多,假若到來乙隻被收養的寵物,那麼哪個領養者能夠領養它呢?能夠領養它的領養者,是那個希望被領養寵物的特點值最接近該寵物特點值的領養者,如果該寵物的特點值為a,存在兩個領養者他們希望領養寵物的特點值分別為a-b和a+b,那麼特點值為a-b的那個領養者將成功領養該寵物。 乙個領養者領養了乙個特點值為a的寵物,而它本身希望領養的寵物的特點值為b,那麼這個領養者的不滿意程度為abs(a-b)。【任務描述】你得到了一年當中,領養者和被收養寵物到來收養所的情況,希望你計算所有收養了寵物的領養者的不滿意程度的總和。這一年初始時,收養所裡面既沒有寵物,也沒有領養者。

第一行為乙個正整數n,n<=80000,表示一年當中來到收養所的寵物和領養者的總數。接下來的n行,按到來時間的先後順序描述了一年當中來到收養所的寵物和領養者的情況。每行有兩個正整數a, b,其中a=0表示寵物,a=1表示領養者,b表示寵物的特點值或是領養者希望領養寵物的特點值。(同一時間呆在收養所中的,要麼全是寵物,要麼全是領養者,這些寵物和領養者的個數不會超過10000個)

僅有乙個正整數,表示一年當中所有收養了寵物的領養者的不滿意程度的總和mod 1000000以後的結果。

50 2

0 41 3

1 21 5

3(abs(3-2) + abs(2-4)=3,最後乙個領養者沒有寵物可以領養)

分析:我們記錄一下當前的店裡是人還是寵物,對於每個匹配操作,我們從根find下去,記錄一下最接近它的點,然後刪除就行。

**:

#include #include #include #include using namespace std;

#define n 100050

#define ls ch[p][0]

#define rs ch[p][1]

#define get(x) (ch[f[x]][1]==x)

int ch[n][2], val[n], siz[n], f[n], sz, cnt[n], tot, n, ans, mod = 1000000, rt;

void clr(int p)

void pushup(int p)

void rotate(int x)

void splay(int x,int y)

void insert(int x)

while(1)

fa = p;

p = ch[p][val[p] < x];

if(!p)

}}int pre()

void del(int p)

if(!ls && !rs)

if(!ls)

if(!rs)

int pr = pre();

int tmp = rt;

splay(pr, 0);

rt = pr;

ch[pr][1] = ch[tmp][1];

f[ch[tmp][1]] = pr;

clr(tmp); pushup(rt);

}int abs(int x)

void solve(int x)

int tmp = ch[p][val[p] < x];

if(tmp)

}else

}}void print(int p)

int main() else if(now > 0) else

// print(rt);

}else else

// print(rt);}}

printf("%d\n",ans);

}

bzoj1208 HNOI2004 寵物收養所

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

bzoj1208 HNOI2004 寵物收養所

題目 平衡樹的簡單應用,刪除,求前驅和後繼。一般來說,會建兩顆線段樹,但事實上,題目可得,同一時間內,只會有寵物或人,所以,只要一顆就夠了。include define n 80000 define mod 1000000 using namespace std int ch n 1 2 siz n...

BZOJ1208 HNOI2004 寵物收養所

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