제출 #712714

#제출 시각아이디문제언어결과실행 시간메모리
712714tht2005Gap (APIO16_gap)C++17
100 / 100
62 ms6420 KiB
#include "gap.h" #include <vector> #include <algorithm> #include <iostream> #include <utility> long long findGap(int T, int N) { if(N == 1) { return 0; } if(T == 1) { long long LF, RT; MinMax(0, 1LL << 60, &LF, &RT); long long res = (N == 2) ? (RT - LF) : 0; for(int l = 1, r = N - 2; l <= r; ++l, --r) { long long LF_old = LF, RT_old = RT; MinMax(LF_old + 1, RT_old - 1, &LF, &RT); res = std::max(res, std::max(LF - LF_old, RT_old - RT)); if(l + 1 == r) { res = std::max(res, RT - LF); } } return res; } long long LF, RT; MinMax(0, 1LL << 60, &LF, &RT); if(N == 2) { return RT - LF; } long long BLK = (RT - LF + 1) / (N - 1); std::vector<std::pair<long long, long long>> segment(N - 1); long long tmp = LF; for(int i = 0; i < N - 1; ++i) { segment[i].first = tmp; segment[i].second = tmp + BLK - 1; tmp += BLK; } segment.back().second = RT; std::vector<std::pair<long long, long long>> range_(N - 1); for(int i = 0; i < N - 1; ++i) { MinMax(segment[i].first, segment[i].second, &range_[i].first, &range_[i].second); } std::vector<std::pair<long long, long long>> r_; for(int i = 0; i < N - 1; ++i) { if(range_[i].first != -1) { r_.push_back(range_[i]); } } long long res = BLK; for(int i = 0; i + 1 < (int)r_.size(); ++i) { res = std::max(res, r_[i + 1].first - r_[i].second); } return res; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...