博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ACM-ICPC 2018 徐州赛区网络预赛 G. Trace (set维护)
阅读量:5042 次
发布时间:2019-06-12

本文共 1185 字,大约阅读时间需要 3 分钟。

注意题目保证不会有一个矩形完全包括另一个矩形的情况

时间序上从后往前看,一个坐标\((x,y)\)加进来之前,如果已经有\(x_i<x\),则对结果的贡献为\(x-x_i\);若不存在\(x_i<x\),则对结果的贡献为\(x\).纵坐标\(y\)同理.
用两个集合维护已经存在的横纵坐标,每次用set自带的lower_bound查找第一个大于等于当前x和y的值,然后将迭代器--以查找上一个元素(即第一个小于它的元素).

#include
#define X first#define Y secondusing namespace std;typedef long long LL;pair
vz[50005];set
dp1; //Xset
dp2; //Yint main(){ #ifndef ONLINE_JUDGE freopen("in.txt","r",stdin); freopen("out.txt","w",stdout); #endif set
:: iterator it; set
:: reverse_iterator ir; int n; while(scanf("%d",&n)==1){ dp1.clear(); dp2.clear(); for(int i=1;i<=n;++i) scanf("%lld %lld",&vz[i].first,&vz[i].second); LL res=0; for(int i=n;i>=1;--i){ it = dp1.lower_bound(vz[i].X); if(it==dp1.begin()||dp1.empty()){ res += vz[i].first; } else{ --it; res += vz[i].X - (*it); } it = dp2.lower_bound(vz[i].Y); if(it==dp2.begin()||dp2.empty()){ res += vz[i].second; } else{ --it; res += vz[i].Y - (*it); } dp1.insert(vz[i].first); dp2.insert(vz[i].second); } printf("%lld\n",res); } return 0;}

转载于:https://www.cnblogs.com/xiuwenli/p/9623455.html

你可能感兴趣的文章
二叉索引树 树状数组
查看>>
日志框架--(一)基础篇
查看>>
Java设计模式之原型模式
查看>>
Spring学习(四)-----Spring Bean引用同xml和不同xml bean的例子
查看>>
哲理故事与管理之道(20)-用危机激励下属
查看>>
关于源程序到可运行程序的过程
查看>>
wepy的使用
查看>>
Maven中的SnapShot版本和Release版本
查看>>
淘宝技术发展
查看>>
am335x ar8031 双网口配置记录
查看>>
nodejs之入门
查看>>
ios中的三种弹框《转》
查看>>
Weakness and Poorness CodeForces - 578C
查看>>
2873=老--质价比
查看>>
Oracle 存储过程简单语法
查看>>
程序员必须软件
查看>>
数值函数ROUND(四舍五入),TRUNC(不四舍五入),MOD
查看>>
[毕业生的商业软件开发之路]开发第一个Windows应用程序
查看>>
AcWing 204. 表达整数的奇怪方式 (线性同余方程组)打卡
查看>>
web api 返回数据XML JSON
查看>>