F 第二大数
要求的其实是下图标注的部分,其中aij序列元素从下标i到j中第二大的数也就是题目中的X

因为只要求第二大的数,所以只需先求出最大的数max1和第二大的数max2,然后根据下一个数的大小更新max1和max2即可。
注意要开 long long
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 
 | #include<iostream>#include<algorithm>
 using namespace std;
 const int N = 1e4 + 9;
 typedef long long ll;
 int a[N];
 ll ans;
 int main()
 {
 int n;
 cin >> n;
 for (int i = 0; i < n;i++)
 cin >> a[i];
 for (int i = 0; i < n;i++)
 {
 int ma1 = max(a[i], a[i + 1]);
 int ma2 = min(a[i], a[i + 1]);
 ans += ma2;
 for (int j = i+2; j < n;j++)
 {
 if(a[j]>ma1)
 {
 ma2 = ma1;
 ma1 = a[j];
 }
 else if(a[j]>ma2&&a[j]<ma1)
 ma2 = a[j];
 ans += ma2;
 }
 }
 cout << ans << endl;
 return 0;
 }
 
 |