bzoj1208 HNOI2004 寵物收養所

2021-08-08 01:14:25 字數 1649 閱讀 1889

題目

平衡樹的簡單應用,刪除,求前驅和後繼。

一般來說,會建兩顆線段樹,但事實上,題目可得,同一時間內,只會有寵物或人,所以,只要一顆就夠了。

#include

#define n 80000

#define mod 1000000

using

namespace

std;

int ch[n+1][2],siz[n+1],cnt[n+1],f[n+1],key[n+1],sz,rt;

int n,opt,x,ans,tmp1,tmp2,now,flag,num,mi,id;

inline

char nc()

inline

int read()

inline

void clear(int x)

inline

int get(int x)

inline

void update(int x)

inline

void rotate(int x)

inline

void splay(int x)

inline

void insert(int x)

int now=rt,fa=0;

while(true)

fa=now;

now=ch[now][key[now]if(now)continue;

sz++;clear(sz);

key[sz]=x,cnt[sz]=1,siz[sz]=1;

f[sz]=fa;ch[fa][key[fa]return;

}

}inline

int pre()

inline

int suf()

inline

int find(int x)

ans+=cnt[now];

now=ch[now][1];}}

}inline

int findx(int x)

}}inline

void del(int x)

if(!ch[rt][0]&&!ch[rt][1])

if(!ch[rt][0])

if(!ch[rt][1])

int oldrt=rt,leftbig=pre();

splay(leftbig);

ch[rt][1]=ch[oldrt][1];

f[ch[oldrt][1]]=rt;

clear(oldrt);

return;

}int main()

if(!flag)insert(x),num++;

else

mi=~0u>>1;

insert(x);

tmp1=pre(),tmp2=suf();

if(tmp1&&abs(x-key[tmp1])abs(x-key[tmp1]),id=tmp1;

if(tmp2&&abs(x-key[tmp2])abs(x-key[tmp2]),id=tmp2;

ans=(ans+mi)%mod;

del(x);

del(key[id]);

num--;}}

cout



bzoj1208 HNOI2004 寵物收養所

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

BZOJ1208 HNOI2004 寵物收養所

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

bzoj1208 HNOI2004 寵物收養所

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