[ARC073C] Ball Coloring(贪心)
[ARC073C] Ball Coloring
Solution
我們發現編號的最大值maxmaxmax必然會在Rmax,BmaxR_{max},B_{max}Rmax?,Bmax?中至少一個出現,最小值minminmin必然會在Rmin,BminR_{min},B_{min}Rmin?,Bmin?中至少一個出現。
因此會有四種情況:
因為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?之間,于是我們可以枚舉t=Bmint=B_{min}t=Bmin?,讓BmaxB_{max}Bmax?盡量小,于是對于一個包(x,y)(x,y)(x,y),不妨令x≤yx \leq yx≤y。
- 若x≤y<tx\leq y<tx≤y<t,則無解。
- 若x<t≤yx< t\leq yx<t≤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),我們同樣可以枚舉t=Rmint=R_{min}t=Rmin?,對于每個(x,y),x<y(x,y),x<y(x,y),x<y,有:
- 若x≤y<tx\leq y<tx≤y<t,則無解。
- 若x<t≤yx< t\leq yx<t≤y,則把yyy涂成RRR。
- 若t≤x≤yt\leq x\leq yt≤x≤y,則把yyy涂成RRR。
因此我們會只會讓yyy涂成RRR,xxx涂成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; } 創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的[ARC073C] Ball Coloring(贪心)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: css3选择器
- 下一篇: [ARC074C] RGB Sequen