Submission #671608

#TimeUsernameProblemLanguageResultExecution timeMemory
671608CutebolDivide and conquer (IZhO14_divide)C++17
100 / 100
55 ms15976 KiB
#include <bits/stdc++.h> using namespace std; //void fopn(string name){freopen((name+".in").c_str(),"r",stdin); freopen((name+".out").c_str(),"w",stdout);} #define Scaramouche ios_base::sync_with_stdio(0) ; cin.tie(0) ; cout.tie(0); #define int long long #define itn int #define endl "\n" #define ff first #define ss second const int N = 1e6 + 5 ; const int mod = 1e9 + 7 ; const int inf = 1e7 ; int n , mx ; vector <int> x , g , a ; vector <int> pref , prefs ; map <int , vector <int> > mp ; void solve(){ cin >> n ; x.resize(n) , g.resize(n) , a.resize(n) , pref.resize(n) , prefs.resize(n) ; for ( int i = 0 ; i < n ; i ++ ) cin >> x[i] >> g[i] >> a[i] ; pref[0] = a[0] ; prefs[0] = g[0] ; for ( int i = 1 ; i < n ; i ++ ){ pref[i] = pref[i-1] ; pref[i] += a[i] ; prefs[i] = prefs[i-1] + g[i] ; mp[pref[i]].push_back(i) ; } int suf[n]; suf[n - 1] = pref[n - 1] - x[n - 1]; for (int i = n - 2; i >= 0; i--) suf[i] = max(suf[i + 1], pref[i] - x[i]); for ( int i = 0 ; i < n ; i ++ ){ int need = -x[i]; if (i) need += pref[i - 1]; int l = i, r = n; while (l + 1 < r) { int mid = (l + r) >> 1; if (suf[mid] >= need) l = mid; else r = mid; } mx = max(mx, prefs[l] - prefs[i] + g[i]); } cout << mx << endl ; } signed main(){ // fopn("talent") ; Scaramouche ; int t = 1 ; // cin >> t ; while ( t -- ) solve() ; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...