题目:给定一个一到n的数字各出现一定的排列a[1]、a[2]、···、a[n]。定义f(l,r)表示a[l]、a[l+1]、a[l+2]、···a[r]中的次大值,你需要求出对于所有的1<=i<j<=n,f(i,j)的和。
输入:第一行一个整数n,第二行n各整数表示a[i]。
输出:一行一个整数,表示答案。
范围:对于100%的整数n,1<n<=100000;
这是我的代码:```
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n,a[100001],b,c,s=0;
cin>>n;
for (int i=1;i<=n;i++)
{
cin>>a[i];
}
for (int i=1;i<n;i++)
{
for (int j=i+1;j<=n;j++)
{
if (a[i]>a[i+1])
{
b=a[i];
c=a[i+1];
}
else
{
b=a[i+1];
c=a[i];
}
if (j>i+1)
{
for (int k=i+2;k<=j;k++)
{
if (a[k]>=b)
{
c=b;
b=a[k];
}
else if (a[k]<b && a[k]>c) c=a[k];
}
}
s=s+c;
}
}
cout<<s<<endl;
return 0;
}
提示超出时限,请问各位大佬该咋改?╮(╯﹏╰)╭