题目描述
题目描述
33DAI 拿到了 nn 个数互不相等的数,第 ii 个数为 aiai。
如果两个位置 i,ji,j,满足 i<ji<j 并且 ai>ajai>aj,那么我们说 (ai,aj)(ai,aj) 是一对逆序对。
请你找到所有逆序对中,和最大的一对,输出“和最大的逆序对”的和。(题目保证至少存在一对逆序对)。
输入格式
第一行一个整数 nn。
接下来一行 nn 个整数,a1∼ana1∼an。
输出格式
一行一个整数,为最大的和。
输入1:
5
3 4 5 1 2
输出1:
7
样例解释
和最大的逆序对为 5,25,2
数据规模与约定
对于 100%100% 的数据,1≤n≤1051≤n≤105,1≤ai≤1091≤ai≤109。
- 子任务 1(30 分):保证 ai>ai+1ai>ai+1
- 子任务 2(30 分):保证 1≤n≤50001≤n≤5000
- 子任务 3(30 分):没有特殊限制
#include<bits/stdc++.h>
using namespace std;
struct nal{
long long a;
int hao;
};
nal jgt[100010];
bool cmp(nal u,nal v){
return u.a>v.a;
}
int main()
{
long long n,max1=0,max2=0,f1=0;
cin>>n;
for(int i=1;i<=n;i++){
cin>>jgt[i].a;
jgt[i].hao=i;
}
sort(jgt+1,jgt+n+1,cmp);
for(int i=2;i<=n;i++){
for(int j=1;j<=i-1;j++){
if(jgt[j].hao<jgt[i].hao){
max1=jgt[j].a+jgt[i].a;
f1++;
break;
}
}
if(f1==1)break;
}
cout<<max1;
return 0;
}