HNOI2004 寵物收養所 splay

2021-09-11 10:40:15 字數 1460 閱讀 8936

知道有三種情況,乙個是為空的,既沒有人也沒有寵物的時候,直接加進去即可;另外還有就是現在寵物的數量多的時候,那麼就是人去選乙個最貼近的;最後乙個就是人在排隊等待的時候,如果有寵物進來了,就直接寵物去選乙個最接近的人即可。

接下來,用到的就是splay的基本操作,找到最貼近的值,當然最開始的時候別忘記加上兩頭的最值,為的就是比較的時候不要出意外。

#include #include #include #include #include #include #include #include #include #include #include #include #define lowbit(x) ( x&(-x) )

#define pi 3.141592653589793

#define e 2.718281828459045

#define inf 0x3f3f3f3f

#define half (l + r)>>1

#define lsn rt<<1

#define rsn rt<<1|1

#define lson lsn, l, mid

#define rson rsn, mid+1, r

#define ql lson, ql, qr

#define qr rson, ql, qr

#define myself rt, l, r

using namespace std;

typedef unsigned long long ull;

typedef long long ll;

const int maxn = 8e5 + 7;

const int mod = 1000000;

int n, root, tot, pot, op, val;

struct node

}t[maxn];

void rotate(int x)

void splay(int x, int goal)

if(!goal) root = x;

}void insert(int x)

if(u) t[u].cnt++;

else

splay(u, 0);

}void find(int x)

int next(int x, int f)

void delete(int x)

else t[next].ch[0] = 0;

}int work(int x)

else

else

}}int main()

}else

else insert(val);

}pot += (op == 0 ? 1 : -1);

}printf("%lld\n", ans);

return 0;}/*

50 2

0 41 3

1 21 5

*/

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 而他也給每個處在收養所...