最近,阿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...