本题我自己造了几个样例都过了,但是交上去就RE了。。。求捞
#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 + 10;
struct node {
int w, l, r;
} edge[N];
int n, a[N];
bool cmp(node x, node y) {
return x.w < y.w;
}
int main() {
scanf("%d", &n);
for (int i = 1; i <= n; i ++) {
scanf("%d", &a[i]);
edge[i].w = a[i];
}
for (int i = 1; i < n; i++) {
edge[i].r = i + 1;
}
for (int i = n; i >= 1; i--) {
edge[i].l = i - 1;
}
sort(edge + 1, edge + 1 + n, cmp);
long long ans = 0;
for (int i = 2; i <= n; i++) {
if (edge[i].w > a[edge[i].l]) {
if (edge[i].l > 0 && edge[i].l <= n) {
ans += max(edge[i].w, a[edge[i].l]);
edge[i].l = edge[edge[i].l].l;
edge[edge[i].l].r = edge[i].w;
}
}
if (edge[i].w > a[edge[i].r]) {
if (edge[i].r > 0 && edge[i].r <= n) {
ans += max(edge[i].w, a[edge[i].r]);
edge[i].r = edge[edge[i].r].r;
edge[edge[i].r].l = edge[i].w;
}
}
}
cout << ans;
/*
4
3 1 4 2
*/
return 0;
}