该加的都加了还是过不了subtask
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N = 1e6 + 10;
int n,res = 0;
ll x[N],p[N],c[N],qp[N],qpx[N],f[N];
int q[N],head = 1,tail = 1;
ll X(int i){
return qp[i];
}
ll Y(int i){
return f[i] + qpx[i];
}
long double slope(int i,int j){
if(X(i)==X(j)) return 1e18;
return ((Y(i) - Y(j) )* 1.0)/(X(i) - X(j));
}
void input(){
scanf("%d",&n);
for(int i = 1;i <= n; ++i){
scanf("%lld%lld%lld",&x[i],&p[i],&c[i]);
qp[i] = qp[i - 1] + p[i];
qpx[i] = qpx[i - 1] + p[i] * x[i];
}
}
void op(){
for(int i = 1;i <= n; ++i){
while(head < tail && slope(q[head],q[head + 1]) < x[i])++head;
int j = q[head];
f[i] = f[j] + x[i] * qp[i] - x[i] * qp[j] - qpx[i] + qpx[j] + c[i];
while(head < tail && slope(i,q[tail]) < slope(q[tail],q[tail - 1]))--tail;
q[++tail] = i;
}
}
int main(){
input();
op();
ll ans = 0x3f3f3f3f3f3f;
for(int i = n;i >= 1; --i){
ans = min(ans,f[i]);
if(p[i]) break;
}
printf("%lld",ans);
return 0;
}