제출 #739860

#제출 시각아이디문제언어결과실행 시간메모리
739860blueSparklers (JOI17_sparklers)C++17
100 / 100
48 ms2944 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; using vll = vector<ll>; using vi = vector<int>; using vvll = vector<vll>; using vvi = vector<vi>; #define sz(x) int(x.size()) int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); ll N, K, T; cin >> N >> K >> T; vll X(1+N); for(int i = 1; i <= N; i++) { cin >> X[i]; } ll lo = 0, hi = ((((1'000'000'000'000'000'000LL / 2LL + 1) / N) + 1) / T) + 1; // ll lo = 1, hi = 1'000'000'000'000'000'000LL/N; // ll lo = 0, hi = 5; // while(lo != hi) { // cerr << "\n\n\n\n\n searching " << lo << ' ' << hi << '\n'; ll mid = (lo + hi)/2; // cerr << "mid = " << mid << "\n"; vll Y(1+N); for(ll i = 1; i <= N; i++) { Y[i] = 2LL * T * mid * i - X[i]; } if(Y[1] > Y[N]) { lo = mid + 1; continue; } int il = K, ir = K; // for(int i = 1; i <= N; i++) // cerr << Y[i] << ' '; // cerr << '\n'; for(int t = 0; 1; t++) { if(t % 2 == 0) { int ln = il; for(int i = il-1; i >= 1; i--) { if(Y[i] <= Y[ln]) ln = i; if(Y[i] > Y[ir]) break; } if(ln == il && t >= 2) break; else il = ln; } else { int rn = ir; for(int i = ir+1; i <= N; i++) { if(Y[i] >= Y[rn]) rn = i; if(Y[i] < Y[il]) break; } if(rn == ir && t >= 2) break; else ir = rn; } } int ul = 1, ur = N; for(int t = 0; 1; t++) { if(t % 2 == 0) { int ln = ul; for(int i = ul+1; i <= K; i++) { if(Y[i] <= Y[ln]) ln = i; if(Y[i] > Y[ur]) break; } if(ln == ul && t >= 2) break; else ul = ln; } else { int rn = ur; for(int i = ur-1; i >= K; i--) { if(Y[i] >= Y[rn]) rn = i; if(Y[i] < Y[ul]) break; } if(rn == ur && t >= 2) break; else ur = rn; } } if(il <= ul && ur <= ir) hi = mid; else lo = mid+1; } cout << hi << '\n'; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...