美术展览
#2348. 「JOI 2018 Final」美术展览
内存限制:256 MiB时间限制:1000 ms标准输入输出
题目类型:传统评测方式:文本比较
上传者: 匿名
题目描述
JOI 国将举行美术展,在美术展中将展出来自全国各地的各种美术品。
现在有 件候选美术品,编号为 至 。每件艺术品有描述其尺寸与价值的两个整数,第 件艺术品的尺寸为 ,其价值为 。
美术展至少有一件美术品被选中并展示,并且举办美术展的展览馆足够大,所以展出所有的 件美术品也是可行的。为了符合 JOI 国人民的审美,我们想使得参展的美术品之间的尺寸之差不能太大。并且,我们想使得参展的美术品价值之和尽量大。因此,我们决定按照以下方式选定参展的美术品:
在参展美术品中,令 为所选美术品中最大的尺寸, 为所选美术品中最小的尺寸。令 为所有参展美术品的总价值之和。给出候选美术品的数量以及其尺寸与价值,求 的最大值。
输入格式
从标准输入中读取数据。
第一行包括一个整数 ,表示有 件候选美术品。
接下来 行,第 行给出两个整数 ,表示第 件美术品的尺寸与价值。
输出格式
输出数据到标准输出中。
输出一行一个整数,表示 的最大值。
样例
样例输入 1
3
2 3
11 2
4 5
样例输出 1
6
#include <bits/stdc++.h> #include<map> #include<set> using namespace std; const int maxn=1e6; typedef long long ll; int n; pair<ll,int>cur[maxn]; int main() { cin>>n; for(int i=1;i<=n;i++)scanf("%lld%d",&cur[i].first,&cur[i].second); ll ans=0,pre=-0x3f3f3f3f,psum=0; sort(cur+1,cur+1+n); for(int i=1;i<=n;i++){ pre=max(pre,-psum+cur[i].first); psum+=cur[i].second; ans=max(ans,pre+psum-cur[i].first); } cout<<ans<<endl; return 0; }