Submission #35676

#TimeUsernameProblemLanguageResultExecution timeMemory
35676funcsrGap (APIO16_gap)C++14
64.63 / 100
66 ms7280 KiB
#include "gap.h" #include <iostream> #include <vector> #include <deque> #include <cassert> #include <algorithm> #include <tuple> #define rep(i, n) for (int i=0; i<(n); i++) #define all(xs) xs.begin(), xs.end() #define pb push_back using namespace std; typedef pair<long long, long long> P; P query(long long s, long long t) { long long mn, mx; MinMax(s, t, &mn, &mx); return P(mn, mx); } long long findGap(int T, int N) { if (T == 1 || N <= 8) { long long lo = 0, hi = 1000000000000000000LL; vector<long long> fr, br; rep(_, (N+1)/2) { long long a, b; tie(a, b) = query(lo, hi); lo = a+1, hi = b-1; fr.pb(a); if (a != b) br.pb(b); } reverse(all(br)); for (long long x : br) fr.pb(x); //for (long long x: fr)cout<<x<<",";cout<<"\n"; long long m = 0; rep(i, N-1) m = max(m, fr[i+1]-fr[i]); return m; } else { long long lo, hi; tie(lo, hi) = query(0, 1000000000000000000LL); long long m = 1, pos = lo+1; while (pos < hi) { //cout<<"pos="<<pos<<", m="<<m<<"\n"; long long a, b; long long r = m; while (true) { tie(a, b) = query(pos, min(pos+r, hi)); //cout<<"query("<<pos<<","<<pos+r<<") -> ("<<a<<","<<b<<")\n"; if (a != -1) break; r *= 2; } //cout<<"a="<<a<<", b="<<b<<"\n"; m = max(m, a-(pos-1)); pos = b+1; } return m; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...