Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- const int N = 1000005;
- int n , a , b , c;
- long long x[N];
- long long sum[N];
- long long dp[N];
- int main(){
- scanf("%d" , &n);
- scanf("%d %d %d" , &a , &b , &c);
- for(int i = 1 ; i <= n ; i++){
- scanf("%I64d" , &x[i]);
- sum[i] = sum[i - 1] + x[i];
- }
- ConvexHull hull(1);
- dp[1] = a * x[1] * x[1] + b * x[1] + c;
- hull.insert(2 * a * x[1] , dp[1] + a * x[1] * x[1] - b * x[1]);
- for(int i = 2 ; i <= n ; i++){
- dp[i] = a * sum[i] * sum[i] + b * sum[i] + c;
- dp[i] = max(dp[i] , b * sum[i] + a * sum[i] * sum[i] + c + hull.find(-sum[i]));
- hull.insert(2 * a * sum[i] , dp[i] + a * sum[i] * sum[i] - b * sum[i]);
- }
- printf("%I64d\n" , dp[n]);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement