【set】【Splay】【pb_ds】bzoj1208 [HNOI2004]宠物收养所

每次来的如果是人,且宠物数不为零,就从宠物中选出一个与其差距最小的,累加答案;若为零,就把他放入另一个集合里。

如果是宠物,则同上。

各种平衡树都可过,我蛋疼地用了pb_ds。

Code:

 1 #include<cstdio>
 2 #include<ext/pb_ds/assoc_container.hpp>
 3 #include<ext/pb_ds/tree_policy.hpp>
 4 using namespace std;
 5 using namespace __gnu_cxx;
 6 using namespace __gnu_pbds;
 7 tree<int,null_type,less<int>,rb_tree_tag,tree_order_statistics_node_update> T[2];
 8 typedef tree<int,null_type,less<int>,rb_tree_tag,tree_order_statistics_node_update>::iterator ITER;
 9 int n,op,a,ans;
10 inline bool empty(const int &x){return T[x].lower_bound(-2147483647)==T[x].end() ? true : false;}
11 inline int Abs(const int &x){return x<0 ? (-x) : x;}
12 int main()
13 {
14     scanf("%d",&n);
15     for(int i=1;i<=n;i++)
16       {
17           scanf("%d%d",&op,&a);
18           if(empty(op^1))
19             T[op].insert(a);
20           else
21             {
22                 ITER it=T[op^1].lower_bound(a);
23                 if((*it)==a)
24                   T[op^1].erase(it);
25                 else
26                   {
27                       ITER it2=T[op^1].upper_bound(a);
28                       if(it==T[op^1].begin())
29                         {
30                             ans=(ans+Abs(a-(*it2)))%1000000;
31                             T[op^1].erase(it2);
32                             continue;
33                         }
34                       it--;
35                       if(it2==T[op^1].end())
36                         {
37                             ans=(ans+Abs(a-(*it)))%1000000;
38                             T[op^1].erase(it);
39                             continue;
40                         }
41                       if(Abs(a-(*it2))<Abs(a-(*it)))
42                         {
43                             ans=(ans+Abs(a-(*it2)))%1000000;
44                             T[op^1].erase(it2);
45                             continue;
46                         }
47                       else
48                         {
49                             ans=(ans+Abs(a-(*it)))%1000000;
50                             T[op^1].erase(it);
51                         }
52                   }
53             }
54       }
55     printf("%d\n",ans);
56     return 0;
57 }
时间: 2024-10-12 21:49:16

【set】【Splay】【pb_ds】bzoj1208 [HNOI2004]宠物收养所的相关文章

[bzoj1208][HNOI2004]宠物收养所

题目好长啊直接copy算了 最近,阿Q开了一间宠物收养所.收养所提供两种服务:收养被主人遗弃的宠物和让新的主人领养这些宠物.每个领养者都希望领养到自己满意的宠物,阿Q根据领养者的要求通过他自己发明的一个特殊的公式,得出该领养者希望领养的宠物的特点值a(a是一个正整数,a<2^31),而他也给每个处在收养所的宠物一个特点值.这样他就能够很方便的处理整个领养宠物的过程了,宠物收养所总是会有两种情况发生:被遗弃的宠物过多或者是想要收养宠物的人太多,而宠物太少. 1. 被遗弃的宠物过多时,假若到来一个领

BZOJ1208: [HNOI2004]宠物收养所 平衡树 Treap 模板题

Description 最近,阿Q开了一间宠物收养所.收养所提供两种服务:收养被 主人遗弃的宠物和让新的主人领养这些宠物.每个领养者都希望领养到自己满意的宠物,阿Q根据领养者的要求通过他自己发明的一个特殊的公式,得出该领养者希 望领养的宠物的特点值a(a是一个正整数,a<2^31),而他也给每个处在收养所的宠物一个特点值.这样他就能够很方便的处理整个领养宠物的过程 了,宠物收养所总是会有两种情况发生:被遗弃的宠物过多或者是想要收养宠物的人太多,而宠物太少. 1. 被遗弃的宠物过多时,假若到来一个

[bzoj1208][HNOI2004][宠物收养所] (平衡树)

Description 最近,阿Q开了一间宠物收养所.收养所提供两种服务:收养被主人遗弃的宠物和让新的主人领养这些宠物.每个领养者都希望领养到自己满意的宠物,阿Q根据领养者的要求通过他自己发明的一个特殊的公式,得出该领养者希望领养的宠物的特点值a(a是一个正整数,a<2^31),而他也给每个处在收养所的宠物一个特点值.这样他就能够很方便的处理整个领养宠物的过程了,宠物收养所总是会有两种情况发生:被遗弃的宠物过多或者是想要收养宠物的人太多,而宠物太少. 1. 被遗弃的宠物过多时,假若到来一个领养者

【权值分块】bzoj1208 [HNOI2004]宠物收养所

不多说.比pb_ds还是要快不少的. 1 #include<cstdio> 2 #include<algorithm> 3 #include<cmath> 4 using namespace std; 5 #define N 80001 6 int sum,sz,num[N],l[295],r[295],a[N],op[N],en,ma[N],ans,n; 7 inline void R(int &x){ 8 char c=0;int f=1; 9 for(;c

bzoj1208: [HNOI2004]宠物收养所 (sbt)

切傻逼题还能wa那么多次我也是醉了 好啦其实是sbt都不会敲了(一直用神器treap) 重点是研究了下陈大神的删除,以前treap的删除都是直接旋转去删的…… 还是treap大法好&…… 题解还用写么?就是找前驱找后继然后判断一下 const maxn=300000; mm=1<<28; mmm=1000000; var left,right,value,s:array[0..maxn]of longint; ans,n,m,i,j,k,l,t,tot,now:longint; fun

【BZOJ-1208】宠物收养所 Splay

1208: [HNOI2004]宠物收养所 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 6638  Solved: 2601[Submit][Status][Discuss] Description 最近,阿Q开了一间宠物收养所.收养所提供两种服务:收养被主人遗弃的宠物和让新的主人领养这些宠物.每个领养者都希望领养到自己满意的宠物,阿Q根据领养者的要求通过他自己发明的一个特殊的公式,得出该领养者希望领养的宠物的特点值a(a是一个正整数,a<2^

BZOJ 1208: [HNOI2004]宠物收养所

1208: [HNOI2004]宠物收养所 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 7514  Solved: 2982[Submit][Status][Discuss] Description 最近,阿Q开了一间宠物收养所.收养所提供两种服务:收养被主人遗弃的宠物和让新的主人领养这些宠物.每个领养者都希望领养到自己满意的宠物,阿Q根据领养者的要求通过他自己发明的一个特殊的公式,得出该领养者希望领养的宠物的特点值a(a是一个正整数,a<2^

BZOJ 1208: [HNOI2004]宠物收养所(BST)

本来想先用set写一遍,再自己写个splay或treap,不过用set过了之后就懒得去写了....以后有空再来写吧..(不会有空的吧= = --------------------------------------------------------------------------------- #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #incl

BZOJ 题目1208: [HNOI2004]宠物收养所(SBT)

1208: [HNOI2004]宠物收养所 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 5440  Solved: 2093 [Submit][Status][Discuss] Description 最近,阿Q开了一间宠物收养所.收养所提供两种服务:收养被主人遗弃的宠物和让新的主人领养这些宠物.每个领养者都希望领养到自己满意的宠物,阿Q根据领养者的要求通过他自己发明的一个特殊的公式,得出该领养者希望领养的宠物的特点值a(a是一个正整数,a<