ARC073E Ball Coloring
2024-08-28 00:37:49
Problem
Solution
把点映射至二维平面,问题就变成了给定 \(n\) 个点,可以把点对 \(y=x\) 对称,求覆盖所有点的最小矩形面积。
可以先把所有点放到 \(y=x\) 下方,那么我们每次只需要贪心地把矩形左/右边界上的点对称过去即可,用multiset维护一下。
正确性在于如果把矩形内部的点对称过去,肯定不会使得当前矩形的面积变小。
时间复杂度 \(O(n\log n)\)。
Code
#include <algorithm>
#include <cstdio>
#include <set>
using namespace std;
typedef long long ll;
const int maxn=200010,INF=0x3f3f3f3f;
template <typename Tp> inline int getmin(Tp &x,Tp y){return y<x?x=y,1:0;}
template <typename Tp> inline int getmax(Tp &x,Tp y){return y>x?x=y,1:0;}
template <typename Tp> inline void read(Tp &x)
{
x=0;int f=0;char ch=getchar();
while(ch!='-'&&(ch<'0'||ch>'9')) ch=getchar();
if(ch=='-') f=1,ch=getchar();
while(ch>='0'&&ch<='9') x=x*10+ch-'0',ch=getchar();
if(f) x=-x;
}
struct data{
int x,y;
bool operator < (const data &b)const{return x<b.x;}
}a[maxn];
int n,mx,mn,bmn=INF;
ll ans=1e18;
multiset<int> A,B;
int main()
{
read(n);
for(int i=1;i<=n;i++)
{
read(a[i].x);read(a[i].y);
if(a[i].x>a[i].y) swap(a[i].x,a[i].y);
getmax(mx,a[i].y);getmin(bmn,a[i].y);
A.insert(a[i].x);B.insert(a[i].y);
}
sort(a+1,a+n+1);
mn=a[1].x;
for(int i=1;i<=n;i++)
{
A.erase(A.find(a[i].x));
B.insert(a[i].x);
B.erase(B.find(a[i].y));
A.insert(a[i].y);
getmin(ans,(ll)(*A.rbegin()-*A.begin())*(*B.rbegin()-*B.begin()));
}
printf("%lld\n",ans);
return 0;
}
最新文章
- Java多线程基础——对象及变量并发访问
- 实现下来ScrollView放大轮播图
- sql单表中某一字段重复,取最近3条或几条数据
- sessionStorage &; localStorage &; cookie
- Redis学习笔记七:独立功能之排序
- [poj3378] Crazy Thairs (DP + 树状数组维护 + 高精度)
- iOS开发---集成百度地图,位置偏移问题
- 用批处理文件来手动启动和停止Oracle服务
- 核反应堆[HDU2085]
- 【一段日子荟萃】where should I go.
- JS 日期格式转换
- NYOJ-104最大和
- openGL线s的绘制
- 生成 Qt 文档
- 《JavaScript面向对象编程指南(第2版)》读书笔记(一)
- js 几种排序方法
- Ajax——从服务器获取各种文件
- VirtualBox运行出现“0x00000000指令引用的0x00000000内存。该内存不能为written” ,错误解决
- hadoop from rookie to ninja - 1. Basic Architecture(基础架构)
- Bullet物理引擎的安装与使用