Submission #1157683

#TimeUsernameProblemLanguageResultExecution timeMemory
1157683vicvicTowers (NOI22_towers)C++20
100 / 100
429 ms123524 KiB
#include <iostream> #include <vector> #include <algorithm> using namespace std; const int NMAX=1e6; int n; int x[NMAX+5], y[NMAX+5], indx[NMAX+5], indy[NMAX+5]; vector <int> xs[NMAX+5], ys[NMAX+5]; int top[NMAX+5], bottom[NMAX+5], min_line[NMAX+5], max_line[NMAX+5]; vector <int> try_again; void add_point (int ind, bool type) { if (type) top[ind]=1; else bottom[ind]=1; int &mn=min_line[y[ind]]; int &mx=max_line[y[ind]]; if (mn==-1) { mn=mx=ind; } else { if (x[mn]>x[ind]) { if (mx!=mn) try_again.push_back (mn); mn=ind; } if (x[mx]<x[ind]) { if (mx!=mn) try_again.push_back (mx); mx=ind; } } if (mx!=ind && mn!=ind) { try_again.push_back (ind); } } int main () { ios :: sync_with_stdio (0); cin.tie (nullptr); cin >> n; for (int i=1;i<=n;i++) { cin >> x[i] >> y[i]; xs[x[i]].push_back (i); ys[y[i]].push_back (i); } for (int i=1;i<=NMAX;i++) { min_line[i]=max_line[i]=-1; sort (xs[i].begin(), xs[i].end(), [&] (int a, int b) {return y[a]<y[b];}); sort (ys[i].begin(), ys[i].end(), [&] (int a, int b) {return x[a]<x[b];}); for (int j=0;j<xs[i].size();j++) { indx[xs[i][j]]=j; } for (int j=0;j<ys[i].size();j++) { indy[ys[i][j]]=j; } } for (int i=1;i<=NMAX;i++) { if (xs[i].empty()) continue; add_point (xs[i][0], 0); add_point (xs[i][xs[i].size()-1], 1); } for (int it=0;it<try_again.size();it++) { int ind=try_again[it]; if (top[ind] && bottom[ind]) { bottom[ind]=top[ind]=0; continue; } if (top[ind]) { top[ind]=0; add_point (xs[x[ind]][indx[ind]-1], 1); } if (bottom[ind]) { bottom[ind]=0; add_point (xs[x[ind]][indx[ind]+1], 0); } } for (int i=1;i<=n;i++) { cout << (bottom[i] || top[i]); } 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...
#Verdict Execution timeMemoryGrader output
Fetching results...