제출 #1256542

#제출 시각아이디문제언어결과실행 시간메모리
1256542motionArt Exhibition (JOI18_art)C++20
0 / 100
0 ms320 KiB
#include<bits/stdc++.h>
using namespace std;
int n;
vector<long long> tree;
void SET(int in,long long val)
{
    in+=n;
    tree[in]=val;
    for(;in>1;in/=2)
    {
        tree[in/2]=max(tree[in],tree[in^1]);
    }
}
long long cal(int b,int e)
{
    long long ans=0;
    for(b+=n,e+=n;b<e;b/=2,e/=2)
    {
        if(b&2==1) ans=max(ans,tree[b++]);
        if(e%2==1) ans=max(ans,tree[--e]);
    }
    return ans;
}

int main()
{
    cin>>n;
   vector<long long> pre;
   vector<pair<long long,long long>> v;
   tree=vector<long long>(2*n,0);
   pre.push_back(0);
   for(int i=0;i<n;i++)
   {
       long long a,b;
       cin>>a>>b;
       v.push_back({a,b});
   }
   sort(v.begin(),v.end());
   for(int i=0;i<n;i++)
   {
       pre.push_back(pre[i]+v[i].second);
   }
   for(int i=0;i<n;i++)
   {
       SET(i,pre[i+1]-v[i].first);
   }
   long long ans=0;
   for(int i=0;i<n;i++)
   {
       ans=max(ans,cal(i+1,n)-pre[i]+v[i].first);
   }
   cout<<ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...