제출 #337265

#제출 시각아이디문제언어결과실행 시간메모리
337265boykut금 캐기 (IZhO14_divide)C++14
17 / 100
2 ms384 KiB
#include <bits/stdc++.h>

using namespace std;

#define int long long
#define MAXN 100000

int x[MAXN], g[MAXN], d[MAXN], n;
int prg[MAXN], prd[MAXN];
int ans = 0;

bool can (int GOLD) {
   for (int l = 0; l < n; l++) {
      int r = lower_bound(prg, prg + n, (l?prg[l-1]:0) + GOLD) - prg;
      if (r >= 0 && r < n) {
         if (x[r] - x[l] <= prd[r] - (l?prd[l-1]:0)) {
            ans = max(ans, prg[r] - (l?prg[l-1]:0));
            return true;
         }
      }
   }
   return false;
}

signed main() {
   //ios::sync_with_stdio(0);
   //cin.tie(0);
   
   cin >> n;
   
   for (int i = 0; i < n; i++) {
      cin >> x[i] >> g[i] >> d[i];
   }
   for (int i = 0; i < n; i++) {
      prg[i] = g[i];
      prd[i] = d[i];
      if (i)
         prg[i] += prg[i - 1],
         prd[i] += prd[i - 1];
   }
   
   int l = 0, r = prg[n - 1];
   while (l <= r) {
      int GOLD = (l + r) / 2;
      if (can (GOLD)) {
         l = GOLD + 1;
      } else {
         r = GOLD - 1;
      }
   }
   
   cout << ans << '\n';
   
   return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...