Submission #1215127

#TimeUsernameProblemLanguageResultExecution timeMemory
1215127byunjaewooGarden (JOI23_garden)C++20
0 / 100
106 ms6588 KiB
#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()];
        sort(tmp.begin(), tmp.end());
        int mx=-1, mn=d, md=1;
        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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...