原题解链接:https://ac.nowcoder.com/discuss/149990

由题可知,如果该序列均为非负数,则从左向右依次删除最优,代价为各个数之和。

而序列中如果有负数,则先从右向左依次删除每个负数,这样会使代价减小的最多。然后序列就只剩下了非负数,依次删除即可。

#include <bits/stdc++.h>
using namespace std;
int n; long long ans, x;
int main() {
    scanf("%d", &n);
    for(int i = 1 ; i <= n ; ++ i) scanf("%lld", &x), ans += x * (x < 0 ? i : 1);
    printf("%lld\n", ans);
}