#include<bits/stdc++.h>
using namespace std;
using ll=long long;
#define int ll
#define pb push_back
using pii=pair<int,int>;
const int lim=3e5+100;
pii x[lim],y[lim];
pii operator+(pii x,pii y){
  return {x.first+y.first,x.second+y.second};
}
pii operator-(pii x,pii y){
  return {x.first-y.first,x.second-y.second};
}
int operator*(pii x,pii y){
  return (x.second*y.first)-(y.second*x.first);
}
int cross(pii x,pii y1,pii y2){
  return (y1-x)*(y2-x);
}
ostream& operator<<(ostream&st,pii x){
  return st<<'{'<<x.first<<' '<<x.second<<'}';
}
vector<pii>convexhull(pii*a,int n){
  vector<pii>hull;
  sort(a,a+n);
  hull.pb(a[0]);
  for(int i=1;i<n;i++){
    int sz;
    while(1<(sz=hull.size())&&0>=cross(hull[sz-2],hull[sz-1],a[i])){
      hull.pop_back();
    }
    hull.pb(a[i]);
  }
  for(int i=n-2;0<=i;i--){
    int sz;
    while(1<(sz=hull.size())&&0>=cross(hull[sz-2],hull[sz-1],a[i])){
      hull.pop_back();
    }
    hull.pb(a[i]);
  }
  if(1<n)hull.pop_back();
  return hull;
}
signed main(){
  ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
  int n,m;
  cin>>n;
  for(int i=0;i<n;i++){
    cin>>x[i].first>>x[i].second;
  }
  cin>>m;
  for(int i=0;i<m;i++){
    cin>>y[i].first>>y[i].second;
  }
  auto a=convexhull(x,n);
  auto b=convexhull(y,m);
  n=a.size();
  m=b.size();
  // for(int i=0;i<n;i++){
  //   cerr<<a[i].first<<' '<<a[i].second<<'\n';
  // }
  // cerr<<'\n';
  // for(int i=0;i<m;i++){
  //   cerr<<b[i].first<<' '<<b[i].second<<'\n';
  // }
  // cerr<<'\n';
  int maxi=0;
  int worst=0,cur=1,area=0;
  for(int i=0;i<n;i++){
    while(cross(a[i],a[cur],b[(worst-1+m)%m])<cross(a[i],a[cur],b[worst])){
      // cerr<<"herea\n";
      worst=(worst-1+m)%m;
    }
    while(cross(a[i],a[cur],b[(worst+1)%m])<cross(a[i],a[cur],b[worst])){
      // cerr<<"hereb\n";
      worst=(worst+1)%m;
    }
    if(cross(a[i],a[cur],b[worst])<=0){
      // cerr<<cross(a[i],a[cur],b[worst])<<'\n';
      // cerr<<a[i].first<<' '<<a[i].second<<" to "<<a[cur].first<<' '<<a[cur].second<<'\n';
      area-=cross(a[i],a[(i+1)%n],a[cur]);
      continue;
    }//else cerr<<"fine "<<cross(a[i],a[cur],b[worst])<<'\n';
    while(1){
      area+=cross(a[i],a[cur],a[(cur+1)%n]);
      cur=(cur+1)%n;
      while(cross(a[i],a[cur],b[(worst-1+m)%m])<cross(a[i],a[cur],b[worst])){
        // cerr<<"here1\n";
        worst=(worst-1+m)%m;
      }
      while(cross(a[i],a[cur],b[(worst+1)%m])<cross(a[i],a[cur],b[worst])){
        // cerr<<"here2\n";
        worst=(worst+1)%m;
      }
      if(cross(a[i],a[cur],b[worst])<=0){
        // cerr<<cross(a[i],a[cur],b[worst])<<'\n';
        // cerr<<a[i].first<<' '<<a[i].second<<" to "<<a[cur].first<<' '<<a[cur].second<<'\n';
        area-=cross(a[i],a[(i+1)%n],a[cur]);
        break;
      }//else cerr<<"fine "<<cross(a[i],a[cur],b[worst])<<'\n';
      // cerr<<"setting "<<area<<' '<<i<<' '<<cur<<" :: "<<a[i]<<' '<<a[cur]<<'\n';
      maxi=max(maxi,area);
    }
  }
  cout<<maxi<<'\n';
}
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... |