Submission #113694

#TimeUsernameProblemLanguageResultExecution timeMemory
113694ioilolcomDivide and conquer (IZhO14_divide)C++14
100 / 100
44 ms6904 KiB
#include <bits/stdc++.h> using namespace std; #define endl "\n" typedef long long int ll; struct camp { int x,g,d; }; vector<camp> v; const int N=1e6+7; ll p[N]; ll sum[N]; ll lol[N]; int main() { ios_base:: sync_with_stdio(false); cin.tie(0); int n; cin>>n; v.resize(n+1); for(int i=1; i<=n; i++) { cin>>v[i].x>>v[i].g>>v[i].d; p[i]=p[i-1]+v[i].d; sum[i]=sum[i-1]+v[i].g; lol[i]=p[i]-v[i].x; } /* for(int i=1; i<=n; i++) { cout<<i<<" "<<lol[i]<<endl; } */ for(int i=n-1; i>=1; i--) { lol[i]=max(lol[i],lol[i+1]); } // v[j].x-v[i].x<=p[j]-p[i-1] // p[i-1]-v[i].x<=p[j]-v[j].x ll ans=0; for(int i=1; i<=n; i++) { int me=p[i-1]-v[i].x; int l=i; int r=n; ans=max(ans,sum[i]-sum[i-1]); while(l<=r) { int mid=(l+r)/2; if(lol[mid]>=me) { ans=max(ans,sum[mid]-sum[i-1]); l=mid+1; } else{ r=mid-1; } } } cout<<ans<<endl; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...