제출 #735851

#제출 시각아이디문제언어결과실행 시간메모리
735851Abrar_Al_SamitGap (APIO16_gap)C++17
30 / 100
44 ms1968 KiB
#include <bits/stdc++.h>
#include "gap.h"
using namespace std;

long long findGap(int T, int N) {
	long long a[N+1];
	if(T==1) {
		int l = 1, r = N;

		long long lef = 0, rit = 1e18;
		while(l<=r) {
			MinMax(lef, rit, &lef, &rit);
			if(l==r) {
				a[l] = lef;
				break;
			} else {
				a[l] = lef, a[r] = rit;
				++lef, --rit;
				++l, --r;
			}
		}

		long long best = 0;
		for(int i=2; i<=N; ++i) {
			best = max(best, a[i] - a[i-1]);
		}
		return best;
	} else {
		long long lef = 0;
		long long already = 1;
		bool fin = 0;
		bool very_first = true;

		long long absmn, absmx;
		MinMax(0, (long long)1e18, &absmn, &absmx);

		while(lef+already+1<=min(absmx, (long long)1e18)) {
			long long pw = already;
			bool fir = true;
			while(1) {
				long long rit = min((long long)1e18, pw+lef-1);

				long long var1, var2;
				MinMax(lef, rit, &var1, &var2);
				if(var1==-1) {
					if(rit==1e18) {
						fin = true;
						break;
					}
					pw *= 2;
				} else {
					if(fir) {
						lef = var2 + 1;
						already = max(already, 1LL);
					}
					else {
						if(!very_first) already = var1 - lef + 1, lef = var2 + 1;
						else lef = var1 + 1;
					}
					break;
				}
				fir = false;
			}
			very_first = false;
			if(fin) break;
		}
		return already;
	}
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...