题目传送门:https://arc073.contest.atcoder.jp/tasks/arc073_c

题目翻译

给你\(N\)个袋子,每个袋子里有俩白球,白球上写了数字。对于每一个袋子,你需要把袋子里的球染色成一个红色和一个蓝色,求出\((R_{mx}-R_{mn})*(B_{mx}-B_{mn})\)的最小值。其中\(R_{mx}\)表示红球的最大值,\(R_{mn}\)表示红球的最小值。蓝球同理。\(N\leqslant 2*10^5\)

题解

分情况讨论。假设最小值是红色,最大值是蓝色,那么我们只需要让红色的最大值尽量小,蓝色的最小值尽量大就行了,也就是权值小的全部涂红,大的全部涂蓝。

假设最小值和最大值都是红色,那么另外一种颜色我们就可以通过不断交换每一组两个球之间的颜色来判断答案是否能被更新。我们把袋子按照较小的那个权值从小到大排序,那么我们依次交换袋子里的球即可。可以证明,这样会使蓝色的球最大值减去最小值先慢慢变小,到最低点之后再慢慢变大。

时间复杂度:\(O(nlogn)\)

空间复杂度:\(O(n)\)

代码如下:

#include <set>
#include <cstdio>
#include <algorithm>
using namespace std;
typedef long long ll;
typedef pair<int,int> pii; const int maxn=2e5+5,inf=2e9; multiset<int>R,B;
ll Rmx=-inf,Rmn=inf,Bmx=-inf,Bmn=inf,ans; int read() {
int x=0,f=1;char ch=getchar();
for(;ch<'0'||ch>'9';ch=getchar())if(ch=='-')f=-1;
for(;ch>='0'&&ch<='9';ch=getchar())x=x*10+ch-'0';
return x*f;
} struct bags {
int v1,v2; bags() {} bags(int _v1,int _v2) {
v1=_v1,v2=_v2;
} bool operator<(const bags &a)const {
return v1<a.v1;
}
}p[maxn]; ll calc() {
return 1ll*(*R.rbegin()-*R.begin())*(*B.rbegin()-*B.begin());
} int main() {
int n=read();
for(int i=1;i<=n;i++) {
int x=read(),y=read();
if(x>y)swap(x,y);
p[i]=bags(x,y);
R.insert(x),B.insert(y);
}
sort(p+1,p+n+1);
ans=calc();
for(int i=1;i<=n;i++) {
int x=p[i].v1,y=p[i].v2;
R.erase(R.find(x)),B.insert(x);
B.erase(B.find(y)),R.insert(y);
ans=min(ans,calc());
}
printf("%lld\n",ans);
return 0;
}

AtCoder Regular Contest 073 E:Ball Coloring的更多相关文章

  1. Atcoder regular Contest 073(C - Sentou)

    Atcoder regular Contest 073(C - Sentou) 传送门 每个人对开关的影响区间为a[i]--a[i]+t,因此此题即为将所有区间离散化后求所有独立区间的长度和 #inc ...

  2. Atcoder regular Contest 073(D - Simple Knapsack)

    Atcoder regular Contest 073(D - Simple Knapsack) 传送门 因为 w1≤wi≤w1+3 这个特殊条件,我们可以将每个重量离散化一下,同时多开一维记录选择的 ...

  3. AtCoder Regular Contest 080 E:Young Maids

    题目传送门:https://arc080.contest.atcoder.jp/tasks/arc080_c 题目翻译 给你一个\(n\)的排列\(p\),一个空序列\(q\),你每次可以从\(p\) ...

  4. AtCoder Regular Contest 072 E:Alice in linear land

    题目传送门:https://arc072.contest.atcoder.jp/tasks/arc072_c 题目翻译 给你一个数组\(D\),然后给你一个操作序列\(d\),每次操作可以将\(D\) ...

  5. AtCoder Regular Contest 074 E:RGB Sequence

    题目传送门:https://arc074.contest.atcoder.jp/tasks/arc074_c 题目翻译 给你一行\(n\)个格子,你需要给每个格子填红绿蓝三色之一,并且同时满足\(m\ ...

  6. AtCoder Regular Contest 063 E:Integers on a Tree

    题目传送门:https://arc063.contest.atcoder.jp/tasks/arc063_c 题目翻译 给你一个树,上面有\(k\)个点有权值,问你是否能把剩下的\(n-k\)个点全部 ...

  7. AtCoder Regular Contest 093 E: Bichrome Spanning Tree(生成树)

    Bichrome Spanning Tree 题意: 给出一个n个点,m条边的无向连通图,现在要给每条边染色,可以染成黑色或者白色. 现在要求在染色完毕后,找出一个至少包含一条黑边和一条白边的最小生成 ...

  8. AtCoder Regular Contest 063 F : Snuke’s Coloring 2 (线段树 + 单调栈)

    题意 小 \(\mathrm{C}\) 很喜欢二维染色问题,这天他拿来了一个 \(w × h\) 的二维平面 , 初始时均为白色 . 然后他在上面设置了 \(n\) 个关键点 \((X_i , Y_i ...

  9. AtCoder Regular Contest 061

    AtCoder Regular Contest 061 C.Many Formulas 题意 给长度不超过\(10\)且由\(0\)到\(9\)数字组成的串S. 可以在两数字间放\(+\)号. 求所有 ...

随机推荐

  1. java自定义before和after

    package com.ada.wuliu.worker.web.cooperation.worker; public class TestOne { abstract class Father{ p ...

  2. 移动应用开发测试工具Bugtags集成和使用教程【转载】

    前段时间,有很多APP突然走红,最终却都是樱花一现.作为一个创业团队,突然爆红是非常难得的机会.然并卵,由于没有经过充分的测试,再加上用户的激增,APP闪退.服务器数据异常等问题就被暴露出来,用户的流 ...

  3. 【翻译自mos文章】关于分区索引:Global, Local, Prefixed and Non-Prefixed

    来源于: Partitioned Indexes: Global, Local, Prefixed and Non-Prefixed (文档 ID 69374.1) APPLIES TO: Oracl ...

  4. 在dev目录创建一个字符设备驱动的流程

    1.struct file_operations 字符设备文件接口 1: static int mpu_open(struct inode *inode, struct file *file) 2: ...

  5. Idftp.DirectoryListing 里面的内容为什么会是空的呢?(转)

    最近在项目中要用到FTP上传,用的是delphi的IdFTP控件,用IdFtp.List(list),发现List里面有内容,可 是到IdFtp.DirectoryListing.Items[iCou ...

  6. 关于 Swift 的一点初步看法

    本文转自:http://onevcat.com/2014/06/my-opinion-about-swift/ 感谢原作者 尽管四点半就起床去排队等入场,结果还是仅仅能坐在了蛮后面的位置看着大屏幕參加 ...

  7. python 基础 7.5 commands 模块

    一. commands 模块   1.commands 模块只使用与linxu 的shell 模式下 在我们平时码字时,经常需要调用系统脚本或者系统命令来解决很多问题,接下来,我们就介绍给大家一个很好 ...

  8. JavaScript 原型解析

    1.什么是对象?     javascript中除了null和undefined之外都是Object的实例. 在Javascript中, 每定义一个函数, 将伴生一个原型对象. 原型就是用来为同一类对 ...

  9. Django一对多的创建

    1.一对多的应用场景: 例如:创建用户信息时候,需要选择一个用户类型[普通用户][金牌用户][铂金用户]等. 2.方法: class Business(models.Model): buss=mode ...

  10. Linux下监视GPU、CPU的使用情况

    1.在运行Tensorflow等程序时会使用到NVIDIA的GPU,所以在程序运行时需要监控GPU的运行情况 使用 nvidia-smi 命令 ,显示如下: nvidia-smi 显示解读: GPU: ...