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

如果是宠物,则同上。
各种平衡树都可过,我蛋疼地用了pb_ds。
Code:
 #include<cstdio>
#include<ext/pb_ds/assoc_container.hpp>
#include<ext/pb_ds/tree_policy.hpp>
using namespace std;
using namespace __gnu_cxx;
using namespace __gnu_pbds;
tree<int,null_type,less<int>,rb_tree_tag,tree_order_statistics_node_update> T[];
typedef tree<int,null_type,less<int>,rb_tree_tag,tree_order_statistics_node_update>::iterator ITER;
int n,op,a,ans;
inline bool empty(const int &x){return T[x].lower_bound(-)==T[x].end() ? true : false;}
inline int Abs(const int &x){return x< ? (-x) : x;}
int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++)
{
scanf("%d%d",&op,&a);
if(empty(op^))
T[op].insert(a);
else
{
ITER it=T[op^].lower_bound(a);
if((*it)==a)
T[op^].erase(it);
else
{
ITER it2=T[op^].upper_bound(a);
if(it==T[op^].begin())
{
ans=(ans+Abs(a-(*it2)))%;
T[op^].erase(it2);
continue;
}
it--;
if(it2==T[op^].end())
{
ans=(ans+Abs(a-(*it)))%;
T[op^].erase(it);
continue;
}
if(Abs(a-(*it2))<Abs(a-(*it)))
{
ans=(ans+Abs(a-(*it2)))%;
T[op^].erase(it2);
continue;
}
else
{
ans=(ans+Abs(a-(*it)))%;
T[op^].erase(it);
}
}
}
}
printf("%d\n",ans);
return ;
}

最新文章

  1. Android深度探索HAL与驱动开发 第三章 Git入门
  2. Hadoop总结篇之三---一个Job到底被提交到哪去了
  3. 【小技巧】9针USB转串口简易连通性测试,附25针转9针
  4. java基础知识回顾之javaIO类--File类应用:获取指定目录下面的指定扩展名的文件,将文件的绝对路径写入到目的文件当中
  5. 关于Spring运用过程中jar包报错问题
  6. 为什么用户主目录下.bash_profile没有自动执行
  7. GDAL切割重采样遥感图像
  8. nefu117 素数个数的位数,素数定理
  9. 使用ButterKnife无法inject view的解决办法
  10. es6之Generator
  11. 基于Spring的最简单的定时任务实现与配置(一)
  12. float 的不确定性
  13. 索信达携手8Manage,打造项目管理系统信息化体系
  14. A+B for Input-Output Practice (VI)
  15. vb.net ping
  16. linux之ab压力测试工具
  17. scrapy爬虫框架处理流程简介
  18. [转]kaldi特征和模型空间转换
  19. redis初认知(持续更新中)
  20. Spring 获取资源文件路径

热门文章

  1. bzoj 2321 数学
  2. textarea输入框实时统计输入字符数
  3. 代码回滚:Reset、Checkout、Revert 的选择
  4. Linux从入门到放弃
  5. JS函数和变量名称冲突
  6. Office Excel保留两位小数的方法,网上到处乱摘的
  7. yii2 一对多关系的对分页造成的影响
  8. PIL处理图片信息
  9. jq监听ajax执行开始,出错,结束。
  10. 获取分组后的TOP 1和TOP N记录