F 第二大数
要求的其实是下图标注的部分,其中aij序列元素从下标i到j中第二大的数也就是题目中的X
因为只要求第二大的数,所以只需先求出最大的数max1和第二大的数max2,然后根据下一个数的大小更新max1和max2即可。
注意要开 long long
1 2 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; }
|