Submission #86765

#TimeUsernameProblemLanguageResultExecution timeMemory
86765duy_tranDivide and conquer (IZhO14_divide)C++14
100 / 100
172 ms5212 KiB
#include<bits/stdc++.h> using namespace std; const int maxn=(int)2e5+50; int n,x[maxn],bit[maxn]; long long gold[maxn],energy[maxn],Max; vector<long long> gt; void Up(int id,int gt) { for(;id<=2*n+2;id+=id&-id)bit[id]=min(bit[id],gt); } int Get(int id) { int res=(int)1e6; for(;id>0;id-=id&-id)res=min(res,bit[id]); return res; } int main() { cin>>n; memset(bit,(int)1e6,sizeof(bit)); Max=0; for(int i=1;i<=n;++i) { cin>>x[i]>>gold[i]>>energy[i]; Max=max(Max,gold[i]); gold[i]+=gold[i-1]; energy[i]+=energy[i-1]; gt.push_back(energy[i]-x[i]); gt.push_back(energy[i-1]-x[i]); } sort(gt.begin(),gt.end()); gt.erase(unique(gt.begin(),gt.end()),gt.end()); for(int i=1;i<=n;++i) { int pos=lower_bound(gt.begin(),gt.end(),energy[i]-x[i])-gt.begin()+1; int l=Get(pos); if(l<(int)1e6)Max=max(Max,gold[i]-gold[l-1]); pos=lower_bound(gt.begin(),gt.end(),energy[i-1]-x[i])-gt.begin()+1; Up(pos,i); } cout<<Max; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...