제출 #38749

#제출 시각아이디문제언어결과실행 시간메모리
38749WaschbarGap (APIO16_gap)C++14
0 / 100
39 ms5144 KiB
#include <bits/stdc++.h> #include "gap.h" using namespace std; const long long INF = 1e18; long long findGap(int T, int N) { multiset < pair< long long,pair<long long,long long> > > st; long long mn, mx; MinMax(0,INF,&mn,&mx); st.insert({-(mx-mx),{mn,mx}}); long long ans = 0; while(!st.empty()) { long long L, R; if(abs(st.begin()->first) <= ans) return ans; L = st.begin()->second.first; R = st.begin()->second.second; long long a1, a2, a3, a4; MinMax(L,(L+R)/2,&a1,&a2); MinMax((L+R)/2+1,R,&a3,&a4); if(a1 == a2 && a1 != -1) ans = max(ans,a2-L); if(a2-a1 == 1 && a1 != -1) ans = max(ans,1ll); if(a1-L == 1 && a1 != -1) ans = max(ans,1ll); if(a3 == a4 && a4 != -1) ans = max(ans,R-a3); if(a4-a3 == 1 && a3 != -1) ans = max(ans,1ll); if(R-a4 == 1 && a4 != -1) ans = max(ans,1ll); if(a2 != -1 && a3 != -1) ans = max(ans,a3-a2); if(a3 == -1 && a1 == -1) ans = max(ans,R-L); if(a1 == -1 && a3 != -1) ans = max(ans,a3-L); if(a3 == -1 && a2 != -1) ans = max(ans,R-a2); if(a1 != -1 && a1-L > 1) st.insert({L-a1,{L,a1}}); if(a1 != -1 && a2-a1 > 1) st.insert({a1-a2,{a1,a2}}); if(a1 != -1 && a3 != -1 && a3-a2 > 1) st.insert({a2-a3,{a2,a3}}); if(a3 != -1 && a4-a3 > 1) st.insert({a3-a4,{a3,a4}}); if(a3 != -1 && R-a4 > 1) st.insert({a4-R,{a4,R}}); } return ans; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...