Submission #1050097

#TimeUsernameProblemLanguageResultExecution timeMemory
1050097vjudge1Art Exhibition (JOI18_art)C++17
50 / 100
1075 ms40308 KiB
#include <iostream> #include <vector> #include <algorithm> #include <climits> using namespace std; class SegmentTree { public: SegmentTree(int size):size(size) { tree.resize(4*size,LLONG_MIN); } void build(const vector<long long>& data,int node,int start,int end) { if (start==end) { tree[node]=data[start]; } else { int mid=(start+end)/2; build(data,2*node+1,start,mid); build(data,2*node+2,mid+1,end); tree[node]=max(tree[2*node+1],tree[2*node+2]); } } void update(int idx,long long value,int node,int start,int end) { if (start==end) { tree[node]=value; } else { int mid=(start+end)/2; if (start<=idx && idx<=mid) { update(idx,value,2*node+1,start,mid); } else { update(idx,value,2*node+2,mid+1,end); } tree[node]=max(tree[2*node+1],tree[2*node+2]); } } long long query(int l,int r,int node,int start,int end) { if (r<start || l>end) return LLONG_MIN; if (l<=start && end<=r) return tree[node]; int mid=(start+end)/2; return max(query(l,r,2*node+1,start,mid),query(l,r,2*node+2,mid+1,end)); } private: vector<long long> tree; int size; }; int main() { long long n; cin>>n; vector<pair<long long,long long>> art(n); vector<long long> values(n); for (long long i=0;i<n;++i) { cin>>art[i].first>>art[i].second; values[i]=art[i].second; } sort(art.begin(),art.end()); SegmentTree segmentTree(n); segmentTree.build(values,0,0,n-1); long long ans=LLONG_MIN; for (int left=0;left<n;++left) { long long sum=0; long long min_size=art[left].first; for (int right=left;right<n;++right) { sum+=art[right].second; long long max_size=art[right].first; long long current_value=sum-(max_size-min_size); ans=max(ans,current_value); } } cout<<ans<<endl; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...