제출 #688467

#제출 시각아이디문제언어결과실행 시간메모리
688467luka1234Divide and conquer (IZhO14_divide)C++14
100 / 100
133 ms7580 KiB
#include <bits/stdc++.h>
#define ll long long
#define ff first
#define ss second
#define pii pair<int,int>
#define pll pair<ll,ll>
#define pb push_back
#define epb emplace_back
#define ull unsigned ll
using namespace std;
ll t[400001];
ll n;
ll prefg[100001];
ll prefe[100001];
ll a[100001];
void update(ll v,ll tl,ll tr,ll pos,ll x){
	if(tl==tr){
		t[v]=x;
		return;
	}
	else{
		ll m=(tl+tr)/2;
		if(pos<=m){
			update(2*v,tl,m,pos,x);
		}
		else{
			update(2*v+1,m+1,tr,pos,x);
		}
		t[v]=max(t[2*v],t[2*v+1]);
	}
}
ll get(ll v,ll tl,ll tr,ll x){
	if(tl==tr){
		return tl;
	}
	ll f1=t[2*v];
	ll f2=t[2*v+1];
	ll m=(tl+tr)/2;
	ll pas=0;
	if(f2>=x){
		pas=get(2*v+1,m+1,tr,x);
	}
	else{
		if(f1>=x){
			pas=get(2*v,tl,m,x);
		}
		else{
			pas=-1;;
		}
	}
	return pas;
}
int main(){
    cin>>n;
    for(ll k=1;k<=n;k++){
    	ll x,y,z;
    	cin>>x>>y>>z;
    	a[k]=x;
    	prefe[k]=prefe[k-1]+z;
    	prefg[k]=prefg[k-1]+y;
    	ll f=prefe[k]-a[k];
    	update(1,1,n,k,f);
	}
	ll mx=0;
	for(ll k=1;k<=n;k++){
		ll f=prefe[k-1]-a[k];
		ll ind=get(1,1,n,f);
		if(ind>=k){
			ll gl=prefg[ind]-prefg[k-1];
			mx=max(mx,gl);
		}
	}
	cout<<mx;
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...