#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define popcount __builtin_popcount using namespace std; typedef long long int ll; typedef pair P; typedef __int128_t lll; template struct ConvexHullTrickMonotone{ using P=pair; deque

deq; ConvexHullTrickMonotone(){} void add(T a, T b){ if(!ismin) a*=(-1), b*=(-1); if(deq.empty()){ deq.push_back({a, b}); return; } if(deq.back().first>=a){ if(deq.back().first==a && deq.back().second<=b) return; while(deq.size()>1){ T a1=deq.back().first, b1=deq.back().second; T a2=deq[deq.size()-2].first, b2=deq[deq.size()-2].second; if((b1-b2)*(a1-a)<(b-b1)*(a2-a1)) break; deq.pop_back(); } deq.push_back({a, b}); }else{ while(deq.size()>1){ T a1=deq.front().first, b1=deq.front().second; T a2=deq[1].first, b2=deq[1].second; if((b1-b2)*(a1-a)>(b-b1)*(a2-a1)) break; deq.pop_front(); } deq.push_front({a, b}); } } T get(T x, bool isinc){ if(isinc){ while(deq.size()>1){ T a1=deq.front().first, b1=deq.front().second; T a2=deq[1].first, b2=deq[1].second; if(a1*x+b11){ T a1=deq.back().first, b1=deq.back().second; T a2=deq[deq.size()-2].first, b2=deq[deq.size()-2].second; if(a1*x+b1>n; for(int i=1; i<=n; i++){ cin>>a[i]; s[i]=s[i-1]+a[i]; } vector> cht(n+2); ll dp[3030][3030]; for(int i=0; i<=n+1; i++) for(int j=0; j