#include using namespace std; #define modulo 1000000007 #define mod(mod_x) ((((long long)mod_x+modulo))%modulo) #define Inf 1000000000000000000 template struct CHT{ vector v; vector a,b; int n; long long sign; T init_value; CHT(vector &x,T iv,long long s=1){ init_value = iv; sign = s; v = x; sort(v.begin(),v.end()); int temp = distance(v.begin(),unique(v.begin(),v.end())); v.resize(temp); n=1; while(true){ if(n>=v.size())break; n<<=1; } v.resize(n,1000000001); a.resize(2*n,0); b.resize(2*n,init_value); } void add(T A,T B,int start){ int now = start; while(true){ int ll = (now<<(__builtin_clz(now)-__builtin_clz(n)))-n; int rr = ll + (n>>(31-__builtin_clz(now))) -1; int m = (ll+rr)>>1; bool fl = sign*(A*v[ll]+B)=R)break; L>>=1;R>>=1; } } T query(T x){ int now = n + distance(v.begin(),lower_bound(v.begin(),v.end(),x)); T ret = init_value; while(true){ ret = min(sign*ret,sign*(a[now]*x+b[now]))*sign; now>>=1; if(now<=0)break; } return ret; } void show(){ int n = 1; for(int i=1;i>N; long long D; cin>>D; vector a(N),b(N); for(int i=0;i>a[i]>>b[i]; } vector x1(N),x2(N+1); for(int i=0;i<=N;i++){ if(i!=N)x1[i] = a[i] + D*(i+1); x2[i] = i; } vector dp1(N+1,Inf),dp2(N+1,Inf); CHT C1(x1,Inf),C2(x2,Inf); dp2[0] = 0; C1.add_line(0LL,0LL); for(long long i=1;i<=N;i++){ dp1[i] = (C1.query(a[i-1]+D*i) + a[i-1]*i*2 + i*i*D - i*D + b[i-1]*2)/2; dp2[i] = min(dp1[i],(C2.query(i) + i*i*D + i*D)/2); C1.add_line(-2*i,dp2[i]*2 + i*i*D + i*D); C2.add_line((a[i-1]-i*D)*2,dp1[i]*2+(-a[i-1]*i)*2+i*i*D-i*D); } cout<