제출 #1255302

#제출 시각아이디문제언어결과실행 시간메모리
1255302elotelo966Art Exhibition (JOI18_art)C++17
0 / 100
0 ms320 KiB
#include <bits/stdc++.h>
using namespace std;

#define int long long
#define OYY LLONG_MAX
#define faster ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);
#define fi first
#define se second
#define FOR for(int i=1;i<=n;i++)
#define mid (start+end)/2
#define pb push_back
#define lim 500005

const int mod=998244353;

int n;

int dizi[lim][2];

int pre[lim];

int tree[4*lim];

inline void update(int node,int start,int end,int l,int r,int val){
	if(start>end || start>r || end<l)return ;
	if(start>=l && end<=r){
		tree[node]=val;
		return ;
	}
	update(node*2,start,mid,l,r,val),update(node*2+1,mid+1,end,l,r,val);
	tree[node]=max(tree[node*2],tree[node*2+1]);
}

inline int query(int node,int start,int end,int l,int r){
	if(start>end || start>r || end<l)return 0;
	if(start>=l && end<=r)return tree[node];
	return max(query(node*2,start,mid,l,r),query(node*2+1,mid+1,end,l,r));
}

int32_t main(){
	faster
	cin>>n;
	vector<pair<int,int>> v;
	FOR{
		cin>>dizi[i][0]>>dizi[i][1];
		v.pb({dizi[i][0],dizi[i][1]});
	}
	
	sort(v.begin(),v.end());
	
	for(int i=0;i<n;i++){
		dizi[i+1][0]=v[i].fi;
		dizi[i+1][1]=v[i].se;
	}
	
	FOR{
		pre[i]=pre[i-1]+dizi[i][1];
	}
	
	FOR{
		update(1,1,n,i,i,pre[i]-dizi[i][0]);
	}
	
	int cev=0;
	
	FOR{
		cev=max(cev,query(1,1,n,i,n)+dizi[i][0]-pre[i-1]);
	}
	
	cout<<cev<<'\n';
	
	return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...