Submission #1166339

#TimeUsernameProblemLanguageResultExecution timeMemory
1166339m5588ohammed금 캐기 (IZhO14_divide)C++20
100 / 100
128 ms29556 KiB
#include <bits/stdc++.h> using namespace std; #define endl "\n" #define mod 1000000007 #define int long long const int N=(1<<18); int Tree[N*2+1]; int pre[200001]; int x[200001],g[200001],e[200001],n; map <int,int> key; set <int> st; void update(int i,int idx){ i+=N; Tree[i]=min(Tree[i],idx); i/=2; while(i!=0){ Tree[i]=min(Tree[i*2],Tree[i*2+1]); i/=2; } return; } int solve(int l1,int r1,int i,int l,int r){ if(l1>r||l>r1) return 1e15; if(l<=l1&&r1<=r) return Tree[i]; return min(solve(l1,(l1+r1)/2,i*2,l,r),solve((l1+r1)/2+1,r1,i*2+1,l,r)); } void comp(){ int k=0; for(int j:st){ key[j]=k++; } return; } signed main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); for(int i=0;i<N*2+1;i++) Tree[i]=1e15; cin>>n; int sum=0,ans=0; for(int i=1;i<=n;i++){ cin>>x[i]>>g[i]>>e[i]; st.insert(sum-x[i]); sum+=e[i]; st.insert(sum-x[i]); } comp(); sum=0; for(int i=1;i<=n;i++){ pre[i]=pre[i-1]+g[i]; update(key[sum-x[i]],i); int idx=solve(0,N-1,1,0,key[sum+e[i]-x[i]]); //cout<<sum-x[i]<<endl; ans=max(ans,pre[i]-pre[idx-1]); sum+=e[i]; } cout<<ans<<endl; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...