HNOI2004 寵物收養所 Splay

2021-07-09 08:22:25 字數 2296 閱讀 5290

題目:

題意:

time limit: 10 sec  

memory limit: 162 mb

submit: 6221  

solved: 2413 [

submit][

status][

discuss]

最近,阿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,最後乙個領養者沒有寵物可以領養)

splay [

submit][

status][

discuss]

home

back

分析:練splay...把**稍微改了一點。。

**:#include using namespace std;

typedef long long ll;

typedef unsigned long long ull;

const ll inf = 1e9+9;

const int mi = ~0u>>1;

enum statu ;

const int maxn = 1e6+7;

int son[maxn][2],fa[maxn],key[maxn];

int root,cnt;

void init()

int newnode(int f,int v)

void rotate(int r,int kind)

void splay(int r,int goal)

else

}} if(0==goal)

root=r;

}void insert(int v)

int r = root;

while(son[r][key[r]v)

r=son[r][0];

else

r=son[r][1];

} return -1;

}int get_pre(int r)

int get_next(int r)

void delete(int v)

else if(!son[r][0])

root=son[r][1];

else

root=son[r][0];

fa[root]=0;

}ostream& debug(ostream &o,int r)

void process(ll &ans,int v)

else

process(ans,v);

}else //加入寵物

else

process(ans,v);

}} cout<

HNOI2004寵物收養所

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

HNOI 2004 寵物收養所

題目鏈結 演算法 建兩棵平衡樹維護領養者和寵物的特點值,這兩棵平衡樹支援 插入刪除,查詢前驅和後繼 筆者的平衡樹選用的是treap,當然,splay,set等資料結構也是可以完成這個任務的 includeusing namespace std define maxn 80010typedef lon...

HNOI2004 寵物收養所

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