Submission #1168565

#TimeUsernameProblemLanguageResultExecution timeMemory
1168565sasdeRoad Construction (JOI21_road_construction)C++20
100 / 100
2619 ms21880 KiB
#include<bits/stdc++.h> #define int long long #define task "strdel" #define ii pair<int,int> #define iii pair<int,ii> #define iv pair<ii,ii> #define se second #define fi first #define ffi fi.fi #define sfi se.fi #define sse se.se #define fse fi.se #define lt(i, c, d) for(int i = c; i <= d; ++i) #define fl(i, c, d) for(int i = d; i >= c; --i) #define pb push_back #define emb emplace_back #define emf emplace_front #define em emplace using namespace std; const int N=1e6+5,lg=20,mod=1e9+7; mt19937 rd(chrono::steady_clock::now().time_since_epoch().count()); int Rand(int u,int v){ return u+rd()%(v-u+1); } int n,k; ii b[N]; bool check(int mid){ set<ii>s; int r=1,cnt=0,l=1; for(int i=1;i<=n;++i){ while(b[i].fi-mid>b[r].fi&&r<=n){ s.erase({b[r].se,r}); ++r; } while(b[i].fi+mid>=b[l].fi&&l<=n){ s.insert({b[l].se,l}); ++l; } auto it=s.lower_bound({b[i].se-mid,0}); while(it!=s.end()){ ii u=*it; if(b[i].se+mid<u.fi)break; ++cnt; if(cnt>=2*k+n)return 1; ++it; } } // cout <<mid <<" "<<(cnt-n)/2<<'\n'; return ((cnt-n)/2)>=k; } int dist(int i,int j){ return max(abs(b[i].fi-b[j].fi),abs(b[i].se-b[j].se)); } void solve(){ cin >> n >> k; for(int i=1;i<=n;++i){ cin >> b[i].fi >> b[i].se; b[i]={b[i].fi+b[i].se,b[i].fi-b[i].se}; } sort(b+1,b+1+n); int r=0,l=4e9; while(r<=l){ int mid=(r+l)>>1; if(check(mid))l=mid-1; else r=mid+1; } // cout <<l<<" "; int mid=l; int r1=1,l1=1; set<ii>s; // cout <<mid; vector<int>res; for(int i=1;i<=n;++i){ while(b[i].fi-mid>b[r1].fi&&r1<=n){ s.erase({b[r1].se,r1}); ++r1; } while(b[i].fi+mid>=b[l1].fi&&l1<=n){ s.insert({b[l1].se,l1}); ++l1; } auto it=s.lower_bound({b[i].se-mid,0}); while(it!=s.end()){ ii u=*it; if(b[i].se+mid<u.fi)break; if(u.se<i) res.emb(dist(u.se,i)); ++it; } } while(res.size()<k)res.emb(l+1); sort(res.begin(),res.end()); for(auto i:res)cout <<i<<'\n'; } main() { srand(time(0)); ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); if(fopen(task".inp","r")){ freopen(task".inp","r",stdin); freopen(task".out","w",stdout); } int t=1; // cin >> t; while(t--){ solve(); cout<<'\n'; } }

Compilation message (stderr)

road_construction.cpp:96:1: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
   96 | main()
      | ^~~~
road_construction.cpp: In function 'int main()':
road_construction.cpp:103:14: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
  103 |       freopen(task".inp","r",stdin);
      |       ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
road_construction.cpp:104:14: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
  104 |       freopen(task".out","w",stdout);
      |       ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~
#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...