제출 #1157839

#제출 시각아이디문제언어결과실행 시간메모리
1157839shnRoad Construction (JOI21_road_construction)C++20
11 / 100
791 ms267060 KiB
#include <bits/stdc++.h> using namespace std; #pragma GCC optimize("Ofast,O3,unroll-loops") #pragma GCC target("avx,avx2") #define Respaabs1equal2xdoner cin.tie(nullptr)->sync_with_stdio(false); #define pll pair < long long , long long > #define len(s) (long long)(s.size()) #define all(x) x.begin() , x.end() #define pofik continue #define int long long #define pb push_back #define F first #define S second const int N = 5e5 + 77 , inf = 1e18 + 77; int n; int x[N], y[N]; int check(int k){ int j = 1; int ans = 0; for(int i = 1; i <= n; i++){ while(j < n && x[j + 1] - x[i] <= k) j++; ans += j - i; } return ans; } int k; void make(int t){ int j = 1; vector < int > v; for(int i = 1; i <= n; i++){ j = max(j , i); while(j < n && x[j + 1] - x[i] <= k) j++; for(int e = i + 1; e <= j; e++){ v.pb(x[e] - x[i]); } } sort(all(v)); for(int i = 0; i < k; i++){ cout << v[i] << '\n'; } } void solve(){ cin >> n >> k; for(int i = 1; i <= n; i++){ cin >> x[i] >> y[i]; } if(n <= 1000){ vector < int > v; for(int i = 1; i <= n; i++){ for(int j = i + 1; j <= n; j++) v.pb(abs(x[i] - x[j]) + abs(y[i] - y[j])); } sort(all(v)); for(int i = 0; i < k; i++){ cout << v[i] << '\n'; } return; } sort(x + 1 , x + n + 1); int l = 1 , r = 4e9 , res = 1; while(l <= r){ int mid = (l + r) >> 1ll; if(check(mid) <= k){ l = mid + 1; res = mid; } else{ l = mid + 1; } } make(res); } signed main(){ Respaabs1equal2xdoner int T = 1; // cin >> T; while(T--){ solve(); } }
#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...