| # | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
|---|---|---|---|---|---|---|---|
| 1306973 | namhh | Gap (APIO16_gap) | C++20 | 0 ms | 0 KiB |
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define pii pair<int,int>
#define fi first
#define se second
const int N = 1e5+5;
int a[N];
int findGap(int T, int N){
if(T == 1){
int mn,mx;
MinMax(1,1e18,&mn,&mx);
a[1] = mn;
a[n] = mx;
for(int i = 2; i <= (n+1)/2; i++){
int mnn,mxx;
MinMax(a[i-1]+1,a[n-i+2]-1,&mnn,&mxx);
a[i] = mnn;
a[n-i+1] = mxx;
}
int ans = 0;
for(int i = 2; i <= n; i++) ans = max(ans,a[i]-a[i-1]);
return ans;
}
else{
int mn,mx;
MinMax(1,1e18,&mn,&mx);
a[1] = mn;
a[n] = mx;
int gap = (mx-mn+n-2)/(n-1);
int ans = gap;
int cur = a[1];
while(true){
int mnn,mxx;
int l = cur+1;
int r = min(l+ans,a[n]);
MinMax(l,r,&mnn,&mxx);
if(mnn != mxx){
ans = max(ans,mnn-cur);
cur = mxx+1;
}
else{
if(mnn != -1){
ans = max(ans,mnn-cur);
cur = mnn+1;
}
}
if(r == a[n]) break;
}
return ans;
}
}
