Submission #49535

#TimeUsernameProblemLanguageResultExecution timeMemory
49535tmwilliamlin168Divide and conquer (IZhO14_divide)C++14
100 / 100
38 ms4096 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long inline int in() { int result = 0; char ch = getchar_unlocked(); while (true) { if(ch >= '0' && ch <= '9') break; ch = getchar_unlocked(); } result = ch-'0'; while(true) { ch = getchar_unlocked(); if (ch < '0' || ch > '9') break; result = result*10 + (ch - '0'); } return result; } inline void out(ll x) { ll rev=x; int count = 0; while((rev % 10) == 0) { ++count; rev /= 10; } //obtain the count of the number of 0s rev = 0; while(x != 0) { rev = rev*10 + x % 10; x /= 10; } //store reverse of N in rev while(rev != 0) { putchar_unlocked(rev % 10 + '0'); rev /= 10; } while(count--) putchar_unlocked('0'); } const int mxN=1e5; int n, x[mxN]; ll pg[mxN+1], pd[mxN+1], pts[mxN], ft[mxN+1], ans; inline void upd(int i, ll x) { for(++i; i<=n; i+=i&-i) ft[i]=max(x, ft[i]); } inline ll qry(int i) { ll r=0; for(; i; i-=i&-i) r=max(ft[i], r); return r; } int main() { n=in(); for(int i=0; i<n; ++i) { x[i]=in(), pg[i+1]=in()+pg[i], pd[i+1]=in()+pd[i]; pts[i]=x[i]-pd[i+1]; } sort(pts, pts+n); for(int i=n-1; i>=0; --i) { upd(lower_bound(pts, pts+n, x[i]-pd[i+1])-pts, pg[i+1]); ans=max(qry(upper_bound(pts, pts+n, x[i]-pd[i])-pts)-pg[i], ans); } out(ans); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...