problem link http://codeforces.com/contest/855/problem/B

What I did, was to keep a track of minimum from start upto index i, maximum from start upto index i, minimum from end upto index i, maximum from end upto index i;

Now I made cases, and accordingly used the formula `(eg- if p<0 use p*min upto index i; if p>0, use p* max upto index i etc.)`

For every case, you can check liek-

```
For i from 1 to N
ans=max(ans, p*max_or_min till i from start + q*arr[i] + r *max or min till i from end);
```

But I believe making cases was redundant, but i thought better safe than sorry XD

please give the solution code

For sake of your own sanity, you shouldnt take a look at my code :3

the explaination is enough thank you

take four array

prefixmin[] (min upto i)

prefixmax[] (max upto i)

sufmin[] (min from n-1 to i)

sufmax[] (max from n-1 to i)

fix j form 0 to n-1

for i and k

check if p<0 multiply p with premin[i]

else multiply p with premax[i]

same for r but multiply with sufmin and sufmax

and check

for more check my code: https://ideone.com/AtQqiJ

however my solution got hacked just for one line mx=-1e18 instead LLONG_MIN