[ARC073C] Ball Coloring(贪心)

[ARC073C] Ball Coloring

Solution

我们发现编号的最大值maxmaxmax必然会在Rmax,BmaxR_{max},B_{max}Rmax,Bmax中至少一个出现,最小值minminmin必然会在Rmin,BminR_{min},B_{min}Rmin,Bmin中至少一个出现。

因此会有四种情况:

  1. Rmax=max,Rmin=minR_{max}=max,R_{min}=minRmax=max,Rmin=min
  2. Rmax=max,Bmin=minR_{max}=max,B_{min}=minRmax=max,Bmin=min
  3. Bmax=max,Rmin=minB_{max}=max,R_{min}=minBmax=max,Rmin=min
  4. Bmax=max,Bmin=minB_{max}=max,B_{min}=minBmax=max,Bmin=min

因为R,BR,BR,B等价,所以condition3,4condition\;3,4condition3,4都可以不考虑。

我们先考虑condition1condition\;1condition1,此时答案为(max−min)(Bmax−Bmin)(max-min)(B_{max}-B_{min})(maxmin)(BmaxBmin),所以相当于RRR是个垃圾桶,随便什么数都可以放,而BBB中的数必须在Bmin,BmaxB_{min},B_{max}Bmin,Bmax之间,于是我们可以枚举t=Bmint=B_{min}t=Bmin,让BmaxB_{max}Bmax尽量小,于是对于一个包(x,y)(x,y)(x,y),不妨令x≤yx \leq yxy

  • x≤y<tx\leq y<txy<t,则无解。
  • x<t≤yx< t\leq yx<ty,则把yyy涂成BBB
  • t≤x≤yt\leq x\leq ytxy,则把xxx涂成BBB

可以离散化,然后把所有(x,y)(x,y)(x,y)xxx排序,模拟这个变化过程,时间复杂度O(nlgn)O(nlgn)O(nlgn)

再来考虑condition2condition\;2condition2,此时答案为(max−Rmin)(Bmax−min)(max-R_{min})(B_{max}-min)(maxRmin)(Bmaxmin),我们同样可以枚举t=Rmint=R_{min}t=Rmin,对于每个(x,y),x<y(x,y),x<y(x,y),x<y,有:

  • x≤y<tx\leq y<txy<t,则无解。
  • x<t≤yx< t\leq yx<ty,则把yyy涂成RRR
  • t≤x≤yt\leq x\leq ytxy,则把yyy涂成RRR

因此我们会只会让yyy涂成RRRxxx涂成BBB,直接O(n)O(n)O(n)计算即可。

总时间复杂度O(nlgn)O(nlgn)O(nlgn)

Code

#include <vector>
#include <list>
#include <map>
#include <set>
#include <deque>
#include <queue>
#include <stack>
#include <bitset>
#include <algorithm>
#include <functional>
#include <numeric>
#include <utility>
#include <sstream>
#include <iostream>
#include <iomanip>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <cctype>
#include <string>
#include <cstring>
#include <ctime>
#include <cassert>
#include <string.h>
//#include <unordered_set>
//#include <unordered_map>
//#include <bits/stdc++.h>#define MP(A,B) make_pair(A,B)
#define PB(A) push_back(A)
#define SIZE(A) ((int)A.size())
#define LEN(A) ((int)A.length())
#define FOR(i,a,b) for(int i=(a);i<(b);++i)
#define fi first
#define se secondusing namespace std;template<typename T>inline bool upmin(T &x,T y) { return y<x?x=y,1:0; }
template<typename T>inline bool upmax(T &x,T y) { return x<y?x=y,1:0; }typedef long long ll;
typedef unsigned long long ull;
typedef long double lod;
typedef pair<int,int> PR;
typedef vector<int> VI;const lod eps=1e-11;
const lod pi=acos(-1);
const int oo=1<<30;
const ll loo=1ll<<62;
const int mods=998244353;
const int MAXN=600005;
const int INF=0x3f3f3f3f;//1061109567
/*--------------------------------------------------------------------*/
inline int read()
{int f=1,x=0; char c=getchar();while (c<'0'||c>'9') { if (c=='-') f=-1; c=getchar(); }while (c>='0'&&c<='9') { x=(x<<3)+(x<<1)+(c^48); c=getchar(); }return x*f;
}
PR a[MAXN];
int b[MAXN];
ll solve1(int n)
{int mn=INF,mx=-INF,nw=-INF,lim=INF;for (int i=1;i<=n;i++) upmin(mn,a[i].fi),upmax(mx,a[i].se),upmax(nw,a[i].fi),upmin(lim,a[i].se);ll ans=loo;int num=0;for (int i=1;i<=n;i++) b[++num]=a[i].fi,b[++num]=a[i].se;sort(b+1,b+num+1);num=unique(b+1,b+num+1)-b-1;for (int i=1,l=1;i<=num;i++){if (b[i]>lim) return ans;while (l<=n&&b[i]>a[l].fi) upmax(nw,a[l].se),l++;upmin(ans,1ll*(mx-mn)*(nw-b[i]));}
}
ll solve2(int n)
{int mn1=INF,mn2=INF,mx1=-INF,mx2=-INF;for (int i=1;i<=n;i++) upmin(mn1,a[i].fi),upmax(mx1,a[i].fi),upmin(mn2,a[i].se),upmax(mx2,a[i].se);return 1ll*(mx1-mn1)*(mx2-mn2);
}
signed main()
{int n=read();for (int i=1;i<=n;i++) a[i].fi=read(),a[i].se=read();for (int i=1;i<=n;i++) if (a[i].fi>a[i].se) swap(a[i].fi,a[i].se);sort(a+1,a+n+1);printf("%lld\n",min(solve1(n),solve2(n)));return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/315611.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

P2831 [NOIP2016 提高组] 愤怒的小鸟 状压dp

某谷链接 题意&#xff1a;选最少的抛物线来覆盖所有点。 注意到a<0&#xff0c;所以我们可以枚举两个点来构成一条抛物线&#xff0c;让后记这两个点构成的抛物线为 cov[i][j]cov[i][j]cov[i][j]&#xff0c;让后他存的是这个抛物线能覆盖到的点的集合&#xff0c;把它存成…

Visual Studio 2019 16.1 使用 .NET Core 3.0

一.前言早在很久之前微软便公布 .NET Core 3.0 将支持开发Winform应用程序等等新特性&#xff0c;现如今 .NET Core 3.0 预览版已经出来第五个预览版了&#xff0c;从 .NET Core 2.2 到 3.0 将是一个大的跨越&#xff0c;从发布的预览版本个数来看&#xff0c;将会增加很多的功…

P4288 [SHOI2014]信号增幅仪 最小圆覆盖

传送门 题意&#xff1a;给出一些点&#xff0c;让后让你用一个ba1p\frac{b}{a}\frac{1}{p}ab​p1​的且绕x正方向逆时针转动了a的椭圆覆盖&#xff0c;求最小的b。 由于题目中椭圆是绕x正方向逆时针旋转了a&#xff0c;为了方便写出方程&#xff0c;我们可以先把它顺时针转回…

[ARC074C] RGB Sequence(dp)

[ARC074C] RGB Sequence Solution 显然是一道dpdpdp&#xff0c;我们发现直接维护当前状态有多少种颜色不好维护&#xff0c;因为颜色只有333种&#xff0c;所以可以直接记录每一种颜色最晚在哪里出现&#xff0c;令fi,j,k,lf_{i,j,k,l}fi,j,k,l​表示前iii个里RRR最晚在jjj&…

Insider Dev Tour 2019 全球巡演 苏州站

Insider Dev Tour微软&#xff0c;全球&#xff0c;巡演&#xff0c;内幕大会介绍Insider Dev Tour 是 Microsoft Build 技术大会的全球巡演活动&#xff0c;是微软面向广大开发者、技术爱好者&#xff0c;介绍其未来技术发展方向的盛会。在 Microsoft Build之后&#xff0c;会…

CERC17 Problem L - Lunar Landscape(差分,坐标系)

CERC17 Problem L - Lunar Landscape Solution 如果只有AAA&#xff0c;我们可以简单地使用差分解决。 加入了BBB之后&#xff0c;可以把单位正方形用对角线拆成四个等腰Rt&#xff0c;统计等腰Rt的个数。我们先进行坐标转换&#xff0c;把(x,y)−>(x−y,xy)(x,y)->(x-…

.NET Core 性能分析: xUnit.Performance 简介

xunit-performance 是xUnit的一个扩展&#xff0c; 使用它可以对.NET Core项目进行性能测试。官网&#xff1a;https://github.com/Microsoft/xunit-performancexUnit大家可能都用过&#xff0c;它是用来做单元测试的&#xff0c;它可以很快给开发人员功能是否OK的反馈。和xUni…

Codeforces Round #703 (Div. 2) Guessing the Greatest C1 C2 二分

link 题意&#xff1a;交互题&#xff0c;每次可以询问一个区间的次大值&#xff0c;保证所有值都不相同&#xff0c;求最大值位置。easy是询问最多40次&#xff0c;hard最多20次。 交互题大部分都是二分&#xff0c;可以向二分考虑。 easy比较好想&#xff0c;假设当前区间为…

TeamCity+Rancher+Docker实现.Net Core项目DevOps

1.准备项1.1.服务器一台&#xff0c;1H4G&#xff08;更小内存应该也可以&#xff0c;自行测试&#xff09;&#xff0c;系统&#xff1a;Ubuntu 16.04 64位1.2.数据库一个&#xff0c;MYSQL,MSSQL都可以&#xff08;还有其他的&#xff0c;自行配置&#xff09;,教程是MSSQL1.…

ARC078F - Mole and Abandoned Mine(状压DP)

ARC078F - Mole and Abandoned Mine Solution 状压dpdpdp。 首先去掉边最小选取边最大&#xff0c;答案为所有边权和减掉选取边权和&#xff0c;于是我们想要最大化选取的边权和。 假设我们知道最后剩下的唯一一条1...n1...n1...n的路径v1,v2,v3...vk(v11,vkn){v_1,v_2,v_3…

Codeforces Round #703 (Div. 2) D . Max Median 二分 +思维

传送门 题意&#xff1a; 给定一个数组和k&#xff0c;求一段连续区间中位数最大值&#xff0c;连续区间长度>k。 如果k的话可以直接秒了&#xff0c;这里是>k&#xff0c;我们可以通过二分让后利用>k这个条件来检查答案。 二分中位数&#xff0c;假设当前二分的为m…

.NET工程师的书单

短暂的假期里抽空整理了一份书单&#xff0c;以个人的见解这些应该是值得.NET工程师至少去看一遍的书籍。但所罗列的仅包括国内目前已出版的国外书籍的英文版&#xff0c;并不包含中文翻译及相关领域的中文书籍。这里没有任何歧视之意&#xff0c;只是更推荐工程师具备熟练阅读…

ARC079F - Namori Grundy(构造,基环树)

ARC079F - Namori Grundy Solution 首先这是一个NNN个点NNN条边的有向图&#xff0c;所以它的基图是一棵基环树&#xff0c;其次这个图的所有点入度为111&#xff0c;因此这是一棵基环外向树。 然后对于aia_iai​&#xff0c;假设我们求出S{aj∣(i,j)∈E}S\{a_j|(i,j)\in E\…

Codeforces Round #703 (Div. 2) B.Eastern Exhibition 中位数结论

link 题意&#xff1a; 给n个点&#xff0c;求有多少个点到所有点距离之和最小。 中位数结论题了&#xff0c;可以考虑一维的情况&#xff0c;让后二维的话乘起来就好啦。 //#pragma GCC optimize(2) #include<cstdio> #include<iostream> #include<string&g…

微服务架构下静态数据通用缓存机制

在分布式系统中&#xff0c;特别是最近很火的微服务架构下&#xff0c;有没有或者能不能总结出一个业务静态数据的通用缓存处理机制或方案&#xff0c;这篇文章将结合一些实际的研发经验&#xff0c;尝试理清其中存在的关键问题以及探寻通用的解决之道。什么是静态数据这里静态…

ARC080F - Prime Flip(贪心,差分,二分图匹配)

ARC080F - Prime Flip Solution 差分&#xff0c;转化为每次可以翻转i,j(j−i∈oddprime)i,j(j-i\in odd\;prime)i,j(j−i∈oddprime)。 显然若j−ij-ij−i是奇质数&#xff0c;则需要111次。 否则若j−ij-ij−i是偶数&#xff0c;则需要222次。 否则若j−ij-ij−i是奇数&am…

Codeforces Round #703 (Div. 2) E. Paired Payment 最短路 + 思维

link 题意&#xff1a; 给一张图&#xff0c;每次只能一下走两个点&#xff0c;比如当前在aaa&#xff0c;往下走到bbb再到ccc&#xff0c;权值为(wa,bwb,c)2(w_{a,b}w_{b,c})^2(wa,b​wb,c​)2。求1到其他点的最短路&#xff0c;不存在输出−1-1−1。 思路&#xff1a; 如果…

ARC077E - guruguru(差分)

ARC077E - guruguru Solution 考虑每一次改动对于每一个xxx的影响。 设我们要从aaa变到bbb。 当a−>x−>ba->x->ba−>x−>b时&#xff0c;该次对xxx的贡献为Da,b−Da,x1D_{a,b}-D_{a,x}1Da,b​−Da,x​1&#xff0c;即一个公差为−1-1−1的递减序列&#…

Codeforces Round #700 (Div. 2) C. Searching Local Minimum 交互二分

传送门 题意: 给一个数组&#xff0c;让你找到a[i]<min(a[i1],a[i−1])a[i]<min(a[i1],a[i-1])a[i]<min(a[i1],a[i−1])位置iii&#xff0c;每次询问iii可以得到a[i]a[i]a[i]&#xff0c;最多询问100次&#xff0c;且a[0]a[n1]∞a[0]a[n1]∞a[0]a[n1]∞。 我们考虑假…

WCF服务端的.NET Core支持项目Core WCF 正式启动

长期以来在wcf客户端库https://github.com/dotnet/wcf里反应最强烈的就是.NET Core的服务端支持https://github.com/dotnet/wcf/issues/2695&#xff0c;在build 2019大会上微软明确说明在将WinForms&#xff0c;WPF和Entity Framework 6添加到.NET Core 3.0后&#xff0c;不打…