제출 #1288558

#제출 시각아이디문제언어결과실행 시간메모리
1288558Faisal_SaqibDivide and conquer (IZhO14_divide)C++20
48 / 100
69 ms14464 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long const int N=100000+100; const ll inf=1e18; ll x[N],e[N],g[N],fen[N*2]; void add(int x,ll p) { while(x<N) { fen[x]=min(fen[x],p); x+=(x&-x); } } ll get(int x) { ll ans=inf; while(x>0) { ans=min(ans,fen[x]); x-=(x&-x); } return ans; } int main() { ios::sync_with_stdio(0); cout.tie(0);cin.tie(0); int n; cin>>n; for(int i=1;i<=n;i++) { cin>>x[i]>>g[i]>>e[i]; g[i]+=g[i-1]; e[i]+=e[i-1]; } set<ll> points; for(int i=0;i<=n;i++) { points.insert(e[i]-x[i]); if(i) points.insert(e[i-1]-x[i]); } ll ans=-inf; for(int i=0;i<N;i++)fen[i]=inf; vector<ll> cpm(begin(points),end(points)); for(int i=0;i<=n;i++) { ll it=lower_bound(begin(cpm),end(cpm),e[i-1]-x[i])-begin(cpm)+1; add(it,g[i-1]); it=lower_bound(begin(cpm),end(cpm),e[i]-x[i])-begin(cpm)+1; ll val=get(it); ans=max(ans,g[i]-val); } cout<<ans<<endl; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...