HNOI2004 寵物收養所

2022-05-31 19:09:17 字數 2228 閱讀 4593

description

最近,阿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)。【任務描述】你得到了一年當中,領養者和被收養寵物到來收養所的情況,希望你計算所有收養了寵物的領養者的不滿意程度的總和。這一年初始時,收養所裡面既沒有寵物,也沒有領養者。

input

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

output

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

sample input

50 2

0 41 3

1 21 5

sample output

3hint

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

我們發現,如果有堆積,那麼要麼全是寵物,要麼全是領養者。那麼我們可以記錄一下當前splay中是寵物還是領養者,每次往splay中插入乙個不同的東西後,就彈出兩個節點(領養者和寵物)

關於本人splay**操作詳解請參考**演算法——splay

#include#include#include#include#include#define inf 0x7f7f7f7f

using namespace std;

typedef long long ll;

typedef unsigned int ui;

typedef unsigned long long ull;

inline int read()

inline void print(int x)

const int n=8e4,p=1e6;

int ans;

struct splay

void splay(int x)

root=x;

} int get_pre()

int get_suc()

void del(int x)

int i=get_pre();

splay(i);

f[tree[x][1]]=i;

tree[i][1]=tree[x][1];

} void get()

ans=(ans+abs(val[root]-val[ans1]-val[ans2]))%p;

del(root),del(ans1+ans2);

} void insert(int x,int flag)

int i=root;

while (1)i=tree[i][0];

}elsei=tree[i][1];

}} splay(len);

if (flag!=tree) get();//彈出一對節點

}}t;

int main()

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 寵物收養所 Splay

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