Submission #1157819

#TimeUsernameProblemLanguageResultExecution timeMemory
1157819timoniRoad Construction (JOI21_road_construction)C++17
32 / 100
10089 ms26432 KiB
// made by Tima // 2025 will be a golden year... //BREAK YOUR LIMITS!!!! // #pragma GCC optimize("-funroll-loops") // #pragma GCC optimize("-fwhole-program") // #pragma GCC optimize("Ofast,no-stack-protector") // #pragma GCC optimize("-fthread-jumps") // #pragma GCC optimize("-falign-functions") // #pragma GCC optimize("-falign-jumps") // #pragma GCC optimize("-falign-loops") // #pragma GCC optimize("-falign-labels") // #pragma GCC optimize("-fcaller-saves") // #pragma GCC optimize("-fcrossjumping") // #pragma GCC optimize("-fcse-follow-jumps") // #pragma GCC optimize("-fcse-skip-blocks") // #pragma GCC optimize("-fdelete-null-pointer-checks") // #pragma GCC optimize("-fdevirtualize") // #pragma GCC optimize("-fexpensive-optimizations") // #pragma GCC optimize("-fgcse") // #pragma GCC optimize("-fgcse-lm") // #pragma GCC optimize("-fhoist-adjacent-loads") // #pragma GCC optimize("-finline-small-functions") // #pragma GCC optimize("-findirect-inlining") // #pragma GCC optimize("-fipa-sra") // #pragma GCC optimize("-foptimize-sibling-calls") // #pragma GCC optimize("-fpartial-inlining") // #pragma GCC optimize("-fpeephole2") // #pragma GCC optimize("-freorder-blocks") // #pragma GCC optimize("-freorder-functions") // #pragma GCC target( "sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native") // #pragma GCC optimize("Ofast,no-stack-protector,unroll-loops,fast-math,O3") // #pragma GCC optimize("Ofast") // #pragma comment(linker, "/stack:200000000") // #pragma GCC target("avx,avx2,fma") // #pragma GCC optimization("unroll-loops") // #pragma GCC optimize("-frerun-cse-after-loop") // #pragma GCC optimize("-fsched-interblock") // #pragma GCC optimize("-fsched-spec") // #pragma GCC optimize("-fschedule-insns") // #pragma GCC optimize("-fschedule-insns2") // #pragma GCC optimize("-fstrict-aliasing") // #pragma GCC optimize("-fstrict-overflow") // #pragma GCC optimize("-ftree-switch-conversion") // #pragma GCC optimize("-ftree-tail-merge") // #pragma GCC optimize("-ftree-pre") // #pragma GCC optimize("-ftree-vrp") // #pragma GCC target("avx") // #pragma ("reroll") #include "bits/stdc++.h" #include <ext/pb_ds/assoc_container.hpp> #define ll long long #define pb push_back #define pf push_front #define ppb pop_back #define ppf pop_front // #define int long long #define y1 SBIL #define F first #define S second #define all(x) (x).begin(), (x).end() #define pii pair<int,int> #define tpii pair <pair <int,int> , int> using namespace std; using namespace __gnu_pbds; const int N = 3e5 + 5; int mod = 1e9 + 7; const ll INF = 1e18; ll a[N],b[N],d = 1e18,jpl[N],jpr[N]; int n,k; pair <int , int> p[N]; pii nigger; map <pii,int> mp; ll dist(ll x1 , ll y1 , ll x2 , ll y2){ return (ll)abs(x1 - x2) + (ll)abs(y1 - y2); } void solve(int l , int r){ if(l == r) return; int md = l + r >> 1; solve(l , md) , solve(md + 1 , r); for(int i = md - 1 ; i >= 1 ; i--){ if(abs(a[i] - a[md]) > d) break; if((ll)dist(a[i] , b[i] , a[md] , b[md]) >= d){ i = jpl[i] + 1; continue; } if(!mp[{i , md}] && d > (ll)dist(a[i] , b[i] , a[md] , b[md])){ d = (ll)dist(a[i] , b[i] , a[md] , b[md]); // cout << md << ' ' << i << ' ' << dist(a[i] , b[i] , a[md] , b[md]) << '\n'; nigger = {md , i}; } if(abs(a[i] - a[md]) > d) break; } for(int i = md + 1 ; i <= n ; i++){ if(abs(a[i] - a[md]) > d) break; if((ll)dist(a[i] , b[i] , a[md] , b[md]) >= d){ i = jpr[i] - 1; continue; } if(!mp[{md , i}] && d > (ll)dist(a[i] , b[i] , a[md] , b[md])){ d = (ll)dist(a[i] , b[i] , a[md] , b[md]); // cout << md << ' ' << i << ' ' << dist(a[i] , b[i] , a[md] , b[md]) << '\n'; nigger = {md , i}; } if(abs(a[i] - a[md]) > d) break; } } void Gold(){ cin >> n >> k; bool ok = 1; for(int i = 1 ; i <= n ; i++){ cin >> a[i] >> b[i]; p[i] = {a[i] , b[i]}; if(b[i] != 0) ok = 0; } sort(p + 1 , p + n + 1); for(int i = 1 ; i <= n ; i++){ a[i] = p[i].F , b[i] = p[i].S; } for(int i = 1 ; i <= n ; i++){ int l = 1 , r = i - 1 , res = 0; while(l <= r){ int md = l + r >> 1; if(a[md] != a[i]){ res = md; l = md + 1; } else{ r = md - 1; } } jpl[i] = res; l = i + 1 , r = n , res = n + 1; while(l <= r){ int md = l + r >> 1; if(a[md] != a[i]){ res = md; r = md - 1; } else{ l = md + 1; } } jpr[i] = res; } if(n <= 1000){ multiset <ll> q; for(int i = 1 ; i <= n ; i++){ for(int j = i + 1 ; j <= n ; j++){ // cout << abs(a[i] - a[j]) + abs(b[i] - b[j]) << ' ' << i << ' ' << j << '\n'; q.insert(abs(a[i] - a[j]) + abs(b[i] - b[j])); } } int cnt = 0; for(auto it : q){ cout << it << '\n'; cnt++; if(cnt == k){ break; } } return; } //2 4 //4 5 if(k == 1){ solve(1 , n); cout << d << '\n'; return; } while(k--){ d = 1e18; solve(1 , n); cout << d << '\n'; // cout << nigger.F << ' ' << nigger.S << '\n'; if(k) mp[{min(nigger.F , nigger.S) , max(nigger.F , nigger.S)}] = 1; } } signed main(/*Zhunussov Temirlan*/){ //freopen("txt.in","r",stdin);freopen("txt.out","w",stdout); ios_base::sync_with_stdio(0);cin.tie(0); srand(time(0)); int TT = 1; // cin >> TT; for(int i = 1 ; i <= TT ; i++){ //cout << "Case " << i << ": "; Gold(); } }
#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...