Advertisement
Guest User

Untitled

a guest
May 6th, 2016
55
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.81 KB | None | 0 0
  1. const int N = 1000005;
  2. int n , a , b , c;
  3. long long x[N];
  4. long long sum[N];
  5. long long dp[N];
  6. int main(){
  7.         scanf("%d" , &n);
  8.         scanf("%d %d %d" , &a , &b , &c);
  9.         for(int i = 1 ; i <= n ; i++){
  10.                 scanf("%I64d" , &x[i]);
  11.                 sum[i] = sum[i - 1] + x[i];
  12.         }
  13.         ConvexHull hull(1);
  14.         dp[1] = a * x[1] * x[1] + b * x[1] + c;
  15.         hull.insert(2 * a * x[1] , dp[1] + a * x[1] * x[1] - b * x[1]);
  16.         for(int i = 2 ; i <= n ; i++){
  17.                 dp[i] = a * sum[i] * sum[i] + b * sum[i] + c;
  18.                 dp[i] = max(dp[i] , b * sum[i] + a * sum[i] * sum[i] + c + hull.find(-sum[i]));
  19.                 hull.insert(2 * a * sum[i] , dp[i] + a * sum[i] * sum[i] - b * sum[i]);
  20.         }
  21.         printf("%I64d\n" , dp[n]);
  22.         return 0;
  23. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement