Submission #1215134

#TimeUsernameProblemLanguageResultExecution timeMemory
1215134byunjaewooGarden (JOI23_garden)C++20
75 / 100
3090 ms10932 KiB
#include <bits/stdc++.h>
using namespace std;

const int Nmax=10010;
int N, M, X, ans=Nmax*Nmax;
vector<int> A[Nmax], B[Nmax], V, all;
int mx, L[Nmax], R[Nmax], C[Nmax];
int mx0, L0[Nmax], R0[Nmax], C0[Nmax];

void Del(int x) {
    if(--C[x]>0) return;
    if(L[x]<R[x]) mx=max(mx, R[x]-L[x]);
    else mx=max(mx, X+R[x]-L[x]);
    R[L[x]]=R[x], L[R[x]]=L[x];
}

signed main() {
    ios_base::sync_with_stdio(0); cin.tie(0);
    cin>>N>>M>>X;
    for(int i=1; i<=N; i++) {
        int x, y; cin>>x>>y;
        x++, y++;
        A[x].push_back(y), A[x+X].push_back(y);
        all.push_back(y), C0[y]++;
    }
    for(int i=1; i<=M; i++) {
        int x, y; cin>>x>>y;
        x++, y++;
        B[x].push_back(y), B[x+X].push_back(y), V.push_back(y);
        all.push_back(y), C0[y]++;
    }
    sort(all.begin(), all.end()), all.erase(unique(all.begin(), all.end()), all.end());
    for(int i=0; i<all.size(); i++) {
        R0[all[i]]=all[(i+1)%all.size()];
        L0[all[i]]=all[(i+all.size()-1)%all.size()];
        if(all[i]<R0[all[i]]) mx0=max(mx0, R0[all[i]]-all[i]);
        else mx0=max(mx0, X+R0[all[i]]-all[i]);
    }
    for(int l=1; l<=X; l++) {
        mx=mx0;
        for(int i=1; i<=X; i++) L[i]=L0[i], R[i]=R0[i], C[i]=C0[i];
        int flag=0;
        for(int r=l; r<l+X; r++) {
            for(int y:A[r]) flag++;
            for(int y:B[r]) Del(y);
            if(flag==N) ans=min(ans, (r-l+1)*(X-mx+1));
        }
    }
    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...