제출 #901580

#제출 시각아이디문제언어결과실행 시간메모리
901580ByeWorldGap (APIO16_gap)C++14
0 / 100
20 ms3108 KiB
#include "gap.h" #include <bits/stdc++.h> #define bupol __builtin_popcount //#define int long long #define ll long long #define ld long double #define fi first #define se second #define pb push_back #define lf (id<<1) #define rg ((id<<1)|1) #define md ((l+r)>>1) using namespace std; const int MAXN = 1e5+5; const int MAXK = 205; const int LOG = 20; const int MOD = 1e9+7; const int SQRT = 520; const ll INF = 1e18+10; typedef pair<ll,ll> pii; typedef pair<ll,pii> ipii; ll mn, mx; ll x, y; int n; set<ll> s; ll ans = INF; void sol(ll l, ll r){ // cari semua di range l-r //cout << l << ' '<< r << " p\n"; if(l > r || r-l+1 <= ans) return; MinMax(l, r, &mn, &mx); if(mn > mx){ // pasti berurutan ans = max(ans, mn-mx); s.insert(mn); s.insert(mx); return; } //if(mn==-1 || mx==-1) return; // gk ada lagi di range ini if(s.find(mn)!=s.end() && s.find(mx)!=s.end()) return; s.insert(mn); s.insert(mx); int tmn = mn, tmx = mx; tmn++; tmx--; sol(tmn, ((tmn+tmx)>>1) ); //cout << ((tmn+tmx)>>1)+1 << ' '<< tmx << " oo\n"; sol(((tmn+tmx)>>1)+1, tmx); } long long findGap(int T, int N) { n = N; sol(0, INF); //for(auto in : s) cout << in << " xx\n"; auto it = s.begin(), it2 = s.begin(); it2++; while(it2 != s.end()){ if((*it)!=-1) ans = max(ans, (*it2)-(*it)); it++; it2++; } return ans; } // for(int i=1; i<=(n+1)/2; i++){ // MinMax(x, y, &mn, &mx); // a[i] = mn; a[n-i+1] = mx; // //cout << mn << ' '<< mx << " p\n"; // x = mn+1; y = mx-1; // }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...