Submission #1215129

#TimeUsernameProblemLanguageResultExecution timeMemory
1215129byunjaewooGarden (JOI23_garden)C++20
0 / 100
83 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()]; 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 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...