ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

luogu P6932 [ICPC2017 WF]Money for Nothing

2021-06-13 20:32:51  阅读:229  来源: 互联网

标签:WF ICPC2017 luogu mid Pus && 左下角 include define


题面传送门
可以发现我们要计算的其实是给定矩形的一些左下角和右上角求最大面积。
对于左下角,如果我们有两个左下角\((x1,y1),(x2,y2)\)且\(x1>x2,y1>y2\)那么第一个左下角其实是没有用的。】
右上角同理。
然后显然就可以决策单调性了。
时间复杂度\(O(nlogn)\)
code:

#include <vector>
#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#include<cmath>
#include<algorithm>
#include<bitset>
#include<set>
#include<map>
#define I inline
#define max(a,b) ((a)>(b)?(a):(b))
#define min(a,b) ((a)<(b)?(a):(b))
#define abs(x) ((x)>0?(x):-(x))
#define l(x) x<<1
#define r(x) x<<1|1
#define re register
#define ll long long
#define db double
#define N 500000
#define M 2000
#define eps (1e-5)
#define mod (1<<31)
#define U unsigned int
using namespace std;
int n,m,k,x,y,z,Ch,Maxn;ll Ans;
struct ques{ll C,D;}A[N+5],B[N+5],C[N+5];
I bool cmp(ques x,ques y){return x.C==y.C?x.D<y.D:x.C<y.C;}
I ll calc(int x,int y){return (B[y].C-A[x].C)*(B[y].D-A[x].D);}
I void solve(int x,int y,int l,int r){
	if(l>r||x>y) return;int i,mid=l+r>>1,p=0;ll Pus=-1e18;for(i=x;i<=y;i++) if(A[i].C<B[mid].C||A[i].D<B[mid].D)calc(i,mid)>Pus&&(Pus=calc(i,mid),p=i);//printf("%d %d %d %d %lld %d\n",x,y,l,r,Pus,p);
	Ans=max(Ans,Pus);p&&(solve(x,p,l,mid-1),solve(p,y,mid+1,r),0); 
}
int main(){
	freopen("1.in","r",stdin);
	re int i,j;scanf("%d%d",&n,&m);for(i=1;i<=n;i++)scanf("%lld%lld",&A[i].C,&A[i].D);for(i=1;i<=m;i++) scanf("%lld%lld",&B[i].C,&B[i].D);
	sort(A+1,A+n+1,cmp);sort(B+1,B+m+1,cmp);
	Maxn=1e9;Ch=0;for(i=1;i<=n;i=j+1){
		for(j=i+1;j<=n;j++) if(A[i].C!=A[j].C) break;j--;
		A[i].D<Maxn&&(C[++Ch]=A[i],Maxn=A[i].D);
	}
	for(i=1;i<=Ch;i++) A[i]=C[i];n=Ch;
	Maxn=0;Ch=0;for(i=m;i;i=j){
		for(j=i-1;j;j--) if(B[i].C!=B[j].C) break;
		B[i].D>Maxn&&(C[++Ch]=B[i],Maxn=B[i].D);
	}
	for(i=1;i<=Ch;i++) B[Ch-i+1]=C[i];m=Ch;
	solve(1,n,1,m);printf("%lld\n",Ans);
}

标签:WF,ICPC2017,luogu,mid,Pus,&&,左下角,include,define
来源: https://www.cnblogs.com/275307894a/p/14881099.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有