#include <bits/stdc++.h>
using namespace std;
const int N=500010, D=5010, INF=1e9;
int n, m, d, ans=INF, a[N], b[N], c[N], d_[N], t[D], l[D], r[D];
bool chk[D];
vector<int> cy, vec[D], rvec[D];
vector<pair<int, int>> tmp;
signed main() {
ios_base::sync_with_stdio(0); cin.tie(0);
cin>>n>>m>>d;
for(int i=1; i<=n; i++) {
cin>>a[i]>>b[i];
chk[a[i]]=true, cy.push_back(b[i]);
}
for(int i=1; i<=m; i++) {
cin>>c[i]>>d_[i];
vec[c[i]].push_back(d_[i]), rvec[d_[i]].push_back(c[i]);
}
sort(cy.begin(), cy.end()), cy.erase(unique(cy.begin(), cy.end()), cy.end());
for(int i=0; i<d; i++) {
sort(vec[i].begin(), vec[i].end());
if(vec[i].empty()) t[i]=-1;
else t[i]=vec[i].back();
}
for(int k=0; k<d; k++) if(!chk[k] && t[k]>=0) tmp.push_back({t[k], k});
for(int i=0, j=0; i<d; i++) {
int mr=d*(j>0)+cy[(j+cy.size()-1)%cy.size()];
int mx=-1, mn=d, md=1;
for(int i=0; i<d; i++) l[i]=-1, r[i]=d;
for(int k=0, p=-1; k<d; k++) if(chk[k] || t[k]>=0) md=max(md, (p>=0)*(k-p)), l[k]=p, p=k, mx=k;
for(int k=d-1, p=d; k>=0; k--) if(chk[k] || t[k]>=0) r[k]=p, p=k, mn=k;
ans=min(ans, (mr-i+1)*min(mx-mn+1, d-md+1));
for(auto [v, k]:tmp) if(v==t[k]) {
if(k==mn) mn=r[k];
if(k==mx) mx=l[k];
if(0<=l[k] && r[k]<d) md=max(md, r[k]-l[k]);
if(r[k]<d) l[r[k]]=l[k];
if(l[k]>=0) r[l[k]]=r[k];
ans=min(ans, (max(mr, v)-i+1)*min(mx-mn+1, d-md+1));
}
for(int k:rvec[i]) t[k]=d+i, tmp.push_back({t[k], k});
if(j<cy.size() && i==cy[j]) j++;
}
cout<<ans;
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |