深圳网站建设培训机构,网站建设期末作业要求,宁夏网站建设中,小程序开发平台哪家服务好[ARC073C] Ball Coloring
Solution
我们发现编号的最大值maxmaxmax必然会在Rmax,BmaxR_{max},B_{max}Rmax,Bmax中至少一个出现#xff0c;最小值minminmin必然会在Rmin,BminR_{min},B_{min}Rmin,Bmin中至少一个出现。
因此会有四种情况#xff1a; Rmaxmax,Rminmi…[ARC073C] Ball Coloring
Solution
我们发现编号的最大值maxmaxmax必然会在Rmax,BmaxR_{max},B_{max}Rmax,Bmax中至少一个出现最小值minminmin必然会在Rmin,BminR_{min},B_{min}Rmin,Bmin中至少一个出现。
因此会有四种情况
Rmaxmax,RminminR_{max}max,R_{min}minRmaxmax,RminminRmaxmax,BminminR_{max}max,B_{min}minRmaxmax,BminminBmaxmax,RminminB_{max}max,R_{min}minBmaxmax,RminminBmaxmax,BminminB_{max}max,B_{min}minBmaxmax,Bminmin
因为R,BR,BR,B等价所以condition3,4condition\;3,4condition3,4都可以不考虑。
我们先考虑condition1condition\;1condition1此时答案为(max−min)(Bmax−Bmin)(max-min)(B_{max}-B_{min})(max−min)(Bmax−Bmin)所以相当于RRR是个垃圾桶随便什么数都可以放而BBB中的数必须在Bmin,BmaxB_{min},B_{max}Bmin,Bmax之间于是我们可以枚举tBmintB_{min}tBmin让BmaxB_{max}Bmax尽量小于是对于一个包(x,y)(x,y)(x,y)不妨令x≤yx \leq yx≤y。
若x≤ytx\leq ytx≤yt则无解。若xt≤yx t\leq yxt≤y则把yyy涂成BBB。若t≤x≤yt\leq x\leq yt≤x≤y则把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)(max−Rmin)(Bmax−min)我们同样可以枚举tRmintR_{min}tRmin对于每个(x,y),xy(x,y),xy(x,y),xy有
若x≤ytx\leq ytx≤yt则无解。若xt≤yx t\leq yxt≤y则把yyy涂成RRR。若t≤x≤yt\leq x\leq yt≤x≤y则把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;templatetypename Tinline bool upmin(T x,T y) { return yx?xy,1:0; }
templatetypename Tinline bool upmax(T x,T y) { return xy?xy,1:0; }typedef long long ll;
typedef unsigned long long ull;
typedef long double lod;
typedef pairint,int PR;
typedef vectorint VI;const lod eps1e-11;
const lod piacos(-1);
const int oo130;
const ll loo1ll62;
const int mods998244353;
const int MAXN600005;
const int INF0x3f3f3f3f;//1061109567
/*--------------------------------------------------------------------*/
inline int read()
{int f1,x0; char cgetchar();while (c0||c9) { if (c-) f-1; cgetchar(); }while (c0c9) { x(x3)(x1)(c^48); cgetchar(); }return x*f;
}
PR a[MAXN];
int b[MAXN];
ll solve1(int n)
{int mnINF,mx-INF,nw-INF,limINF;for (int i1;in;i) upmin(mn,a[i].fi),upmax(mx,a[i].se),upmax(nw,a[i].fi),upmin(lim,a[i].se);ll ansloo;int num0;for (int i1;in;i) b[num]a[i].fi,b[num]a[i].se;sort(b1,bnum1);numunique(b1,bnum1)-b-1;for (int i1,l1;inum;i){if (b[i]lim) return ans;while (lnb[i]a[l].fi) upmax(nw,a[l].se),l;upmin(ans,1ll*(mx-mn)*(nw-b[i]));}
}
ll solve2(int n)
{int mn1INF,mn2INF,mx1-INF,mx2-INF;for (int i1;in;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 nread();for (int i1;in;i) a[i].firead(),a[i].seread();for (int i1;in;i) if (a[i].fia[i].se) swap(a[i].fi,a[i].se);sort(a1,an1);printf(%lld\n,min(solve1(n),solve2(n)));return 0;
}