題目描述
凡凡開了一間寵物收養場。收養場提供兩種服務:收養被主人遺棄的寵物和讓新的主人領養這些寵物。
每個領養者都希望領養到自己滿意的寵物,凡凡根據領養者的要求通過他自己發明的乙個特殊的公式,得出該領養者希望領養的寵物的特點值a(a是乙個正整數,a<2^31),而他也給每個處在收養場的寵物乙個特點值。這樣他就能夠很方便的處理整個領養寵物的過程了,寵物收養場總是會有兩種情況發生:被遺棄的寵物過多或者是想要收養寵物的人太多,而寵物太少。
被遺棄的寵物過多時,假若到來乙個領養者,這個領養者希望領養的寵物的特點值為a,那麼它將會領養乙隻目前未被領養的寵物中特點值最接近a的乙隻寵物。(任何兩隻寵物的特點值都不可能是相同的,任何兩個領養者的希望領養寵物的特點值也不可能是一樣的)如果有兩隻滿足要求的寵物,即存在兩隻寵物他們的特點值分別為a-b和a+b,那麼領養者將會領養特點值為a-b的那只寵物。
收養寵物的人過多,假若到來乙隻被收養的寵物,那麼哪個領養者能夠領養它呢?能夠領養它的領養者,是那個希望被領養寵物的特點值最接近該寵物特點值的領養者,如果該寵物的特點值為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以後的結果。
輸入輸出樣例
輸入 #1複製
50 2
0 41 3
1 21 5
輸出 #1複製
3注:abs(3-2) + abs(2-4)=3,
最後乙個領養者沒有寵物可以領養。
敲了半天splay忽然發現其實set就行了。。。。。。(離散化之後,樹狀陣列也行,只不過多個log)
這道題我們其實沒必要用兩顆splay,因為樹上要麼只有人,要麼只有寵物,所以我們用變數計算一下當前人多還是寵物多即可。
注意計算前驅後繼時應該是非嚴格前驅和非嚴格後繼。
敲敲splay就當練手速了。。
ac**:
#pragma gcc optimize(2)
#include
//#define int long long
using namespace std;
const
int n=
1e5+
10,inf=
0x3f3f3f3f
,mod=
1e6;
struct splayt[n]
;inline
void
push_up
(int p)
inline
void
rotate
(int x)
inline
void
splay
(int x,
int goal)
if(goal==
0) rt=x;
}inline
void
insert
(int x)
u=++tot;
if(fa) t[fa]
.ch[x>t[fa]
.val]
=u; t[u]
.ch[0]
=t[u]
.ch[1]
=0,t[u]
.fa=fa,t[u]
.val=x,t[u]
.cnt=
1,t[u]
.sz=1;
splay
(u,0);
}inline
void
find
(int x)
inline
intnext
(int x,
int f)
inline
intnext_une
(int x,
int f)
inline
void
del(
int x)
inline
intkth
(int x)}}
inline
intrank
(int x)
}sp;
int res,n,cnt;
signed
main()
cnt++;}
else
cnt--;}
} cout
}
HNOI2004 寵物收養場
凡凡開了一間寵物收養場。收養場提供兩種服務 收養被主人遺棄的寵物和讓新的主人領養這些寵物。每個領養者都希望領養到自己滿意的寵物,凡凡根據領養者的要求通過他自己發明的乙個特殊的公式,得出該領養者希望領養的寵物的特點值a a是乙個正整數,a 2 31 而他也給每個處在收養場的寵物乙個特點值。這樣他就能夠...
HNOI2004 寵物收養場 splay
題目描述 凡凡開了一間寵物收養場。收養場提供兩種服務 收養被主人遺棄的寵物和讓新的主人領養這些寵物。每個領養者都希望領養到自己滿意的寵物,凡凡根據領養者的要求通過他自己發明的乙個特殊的公式,得出該領養者希望領養的寵物的特點值a a是乙個正整數,a 2 31 而他也給每個處在收養場的寵物乙個特點值。這...
HNOI2004 寵物收養場(Treap)
洛谷傳送門 這題真是噁心,一開始沒理解題意。原來如果有狗,狗就會存在收養場中,直到有人來領養 如果有人,人也會存在收養場中,直到有狗來被領養。就是建乙個treap,狗來把狗插進去,人來後把狗領養完,多餘的人就存在treap裡,等狗來。1 include 2 include 3 include 4 5...