Bzoj1208 寵物收養所

2022-05-09 15:13:28 字數 1858 閱讀 2304

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

splay模板題,打了1h,我簡直菜爆了

怪不得noipd2t3只能打暴力gg。。。

還有gd+5分數線分這個操作。。。。。無力吐槽

#pragma gcc opitmize("o3")

#pragma g++ opitmize("o3")

#include#include#include#define n 100010

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

using namespace std;

int f[n],ch[n][

2],sz[n],v[n];

int n,m,cnt=

0,rt=0;

inline

int newnode(

int k)

inline

void ps(

int x)

inline

void rot(

int x)

inline

void splay(

int x,

int r=0)

inline

int insert(

int k,

int x=rt) x=ch[x][d];

}}inline

int select(

int k,

int x=rt)

}inline

int search(

int k,

int x=rt)

inline

int rank(

int k,

int x=rt)

}return r;

}inline

int remove(

int k,

int x=rt)

intmain

()else

o=rank(x);

y=select(o-1);

o=select(o);

if(v[o]-xelse}}

printf(

"%lld\n"

,ans%

1000000);}

BZOJ 1208, 寵物收養所

傳送門 編寫乙個支援插入 刪除元素,查詢數列中最接近某值的元素的資料結構。保證沒有重複元素存在出現在樹中。treap和splay都可做。splay苦手選擇treap,然而寫得奇醜無比。查詢最接近某值的元素可以將該值插入樹中查詢前驅與後繼,後比較。查詢完以後再刪掉。include include co...

Bzoj1208 寵物收養所

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

BZOJ 1208 寵物收養所

bzoj 1208 傳送門 求前驅後繼,很明顯的平衡樹操作 其實 set 完全可以做,主要是為了複習下 treap 結果調了好久 注意 在寫平衡樹刪除時一定要記得考慮刪除數不存在的情況 特別是 treap 如果訪問到空要直接返回否則死迴圈 include using namespace std de...