Submission #1109149

#TimeUsernameProblemLanguageResultExecution timeMemory
1109149vjudge1Art Exhibition (JOI18_art)C++17
100 / 100
298 ms36536 KiB
#include<bits/stdc++.h> using namespace std; const int N=5e5; int n; pair<long long,long long>p[N+5]; long long inf=1e18,res=-inf; struct SegmentTree{ long long st[N*4+5],lazy[N*4+5]; void down(int id) { long long t=lazy[id]; if (t==0) return; lazy[id]=0; lazy[id*2]+=t; st[id*2]+=t; lazy[id*2+1]+=t; st[id*2+1]+=t; } void update(int id,int l,int r,int u,int v,long long val) { if (l>v||r<u||u>v) return; if (u<=l&&r<=v) { st[id]+=val; lazy[id]+=val; return; } down(id); int mid=(l+r)/2; update(id*2,l,mid,u,v,val); update(id*2+1,mid+1,r,u,v,val); st[id]=max(st[id*2],st[id*2+1]); } long long get(int id,int l,int r,int u,int v) { if (l>v||r<u||u>v) return -inf; if (u<=l&&r<=v) return st[id]; down(id); int mid=(l+r)/2; return max(get(id*2,l,mid,u,v),get(id*2+1,mid+1,r,u,v)); } } tree; int main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); cin>>n; for (int i=1;i<=n;i++) { cin>>p[i].first>>p[i].second; res=max(res,p[i].second); } sort(p+1,p+1+n); for (int i=1;i<=n;i++) { tree.update(1,1,n,i,i,p[i].first+p[i].second); tree.update(1,1,n,1,i-1,p[i].second); res=max(res,-p[i].first+tree.get(1,1,n,1,i-1)); //cout<<p[i].first<<' '<<p[i].second<<' '<<res<<endl; } cout<<res; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...