题目给的数据范围有正数也有负数,所以有意义的删数方案为:
对于负数在原位置删除保证下标最大从而使i ai最小化
对于正数在下标为1的位置一次删除使i ai最小化
下面是代码:
#include<bits/stdc++.h> long long num[1000005]; int n; int main(void) { long long sum = 0; scanf("%d",&n); for(int i=0;i<n;i++) scanf("%lld",&num[i]); for(int i=n-1;i>=0;i--) { if(num[i] < 0) sum += num[i] * (i+1); else sum += num[i]; } printf("%lld\n",sum); return 0; }