#include <bits/stdc++.h>
using namespace std;
#define fi first
#define se second
#define ll long long
#define int long long
struct line{
ll a, b;
line(){a = 0; b = 0;}
line(ll a, ll b){
this->a = a;
this->b = b;
}
ll operator()(int x){
return a * x + b;
}
};
const int M = 1e9;
struct node {
line tr;
node *lpt, *rpt;
node() : tr(), lpt(nullptr), rpt(nullptr) {}
int divi (int a, int b) {
return a / b - ((a ^ b) < 0 && a % b);
}
void update (line f, int l = 0, int r = M) {
if (l == r) {
tr = (f(l) > tr(l) ? f : tr);
return;
}
int mid = divi(l + r, 2);
if (f(mid) > tr(mid)) swap(tr, f);
if (f.a < tr.a) {
if (lpt == nullptr) lpt = new node(); // khởi tạo bộ nhớ cho cây con trái
lpt->update(f, l, mid); // trường hợp 1.1
}
if (f.a > tr.a) {
if (rpt == nullptr) rpt = new node(); // khởi tạo bộ nhớ cho cây con phải
rpt->update(f, mid + 1, r); // trường hợp 1.2
}
}
ll query (int pos, int l = 0, int r = M) {
ll cur = tr(pos);
int mid = divi(l + r, 2);
if (l == r) return cur;
if (pos <= mid)
return max(cur, lpt == nullptr ? LLONG_MIN : lpt->query(pos, l, mid));
else
return max(cur, rpt == nullptr ? LLONG_MIN : rpt->query(pos, mid + 1, r));
}
};
signed main() {
int n; cin >> n;
vector<pair<pair<int, int>, int>> a(n);
for(int i = 0; i < n; i++){
cin >> a[i].fi.fi >> a[i].fi.se >> a[i].se;
}
sort(a.begin(), a.end());
node lich;
lich.update(line(-a[0].first.first, a[0].first.first * a[0].first.second - a[0].se));
ll mx = a[0].first.first * a[0].first.second - a[0].se;
for(int i = 1; i < n; i++){
ll dp = a[i].first.first * a[i].first.second + lich.query(a[i].first.second) - a[i].se;
mx = max(mx, dp);
lich.update(line(-a[i].first.first, dp));
}
cout << mx;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgZmkgZmlyc3QKI2RlZmluZSBzZSBzZWNvbmQKI2RlZmluZSBsbCBsb25nIGxvbmcKI2RlZmluZSBpbnQgbG9uZyBsb25nCgpzdHJ1Y3QgbGluZXsKCWxsIGEsIGI7CglsaW5lKCl7YSA9IDA7IGIgPSAwO30KCWxpbmUobGwgYSwgbGwgYil7CgkJdGhpcy0+YSA9IGE7CgkJdGhpcy0+YiA9IGI7Cgl9CglsbCBvcGVyYXRvcigpKGludCB4KXsKCQlyZXR1cm4gYSAqIHggKyBiOwoJfQp9OwoKY29uc3QgaW50IE0gPSAxZTk7CgpzdHJ1Y3Qgbm9kZSB7CiAgICBsaW5lIHRyOwogICAgbm9kZSAqbHB0LCAqcnB0OwoKICAgIG5vZGUoKSA6IHRyKCksIGxwdChudWxscHRyKSwgcnB0KG51bGxwdHIpIHt9CgogICAgaW50IGRpdmkgKGludCBhLCBpbnQgYikgewogICAgICAgIHJldHVybiBhIC8gYiAtICgoYSBeIGIpIDwgMCAmJiBhICUgYik7CiAgICB9CgogICAgdm9pZCB1cGRhdGUgKGxpbmUgZiwgaW50IGwgPSAwLCBpbnQgciA9IE0pIHsKICAgICAgICBpZiAobCA9PSByKSB7CiAgICAgICAgICAgIHRyID0gKGYobCkgPiB0cihsKSA/IGYgOiB0cik7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgaW50IG1pZCA9IGRpdmkobCArIHIsIDIpOwogICAgICAgIGlmIChmKG1pZCkgPiB0cihtaWQpKSBzd2FwKHRyLCBmKTsKICAgICAgICBpZiAoZi5hIDwgdHIuYSkgewogICAgICAgICAgICBpZiAobHB0ID09IG51bGxwdHIpIGxwdCA9IG5ldyBub2RlKCk7IC8vIGto4bufaSB04bqhbyBi4buZIG5o4bubIGNobyBjw6J5IGNvbiB0csOhaQogICAgICAgICAgICBscHQtPnVwZGF0ZShmLCBsLCBtaWQpOyAvLyB0csaw4budbmcgaOG7o3AgMS4xCiAgICAgICAgfQogICAgICAgIGlmIChmLmEgPiB0ci5hKSB7CiAgICAgICAgICAgIGlmIChycHQgPT0gbnVsbHB0cikgcnB0ID0gbmV3IG5vZGUoKTsgLy8ga2jhu59pIHThuqFvIGLhu5kgbmjhu5sgY2hvIGPDonkgY29uIHBo4bqjaQogICAgICAgICAgICBycHQtPnVwZGF0ZShmLCBtaWQgKyAxLCByKTsgLy8gdHLGsOG7nW5nIGjhu6NwIDEuMgogICAgICAgIH0KICAgIH0KCiAgICBsbCBxdWVyeSAoaW50IHBvcywgaW50IGwgPSAwLCBpbnQgciA9IE0pIHsKICAgICAgICBsbCBjdXIgPSB0cihwb3MpOwogICAgICAgIGludCBtaWQgPSBkaXZpKGwgKyByLCAyKTsKICAgICAgICBpZiAobCA9PSByKSByZXR1cm4gY3VyOwogICAgICAgIGlmIChwb3MgPD0gbWlkKQogICAgICAgICAgICByZXR1cm4gbWF4KGN1ciwgbHB0ID09IG51bGxwdHIgPyBMTE9OR19NSU4gOiBscHQtPnF1ZXJ5KHBvcywgbCwgbWlkKSk7CiAgICAgICAgZWxzZQogICAgICAgICAgICByZXR1cm4gbWF4KGN1ciwgcnB0ID09IG51bGxwdHIgPyBMTE9OR19NSU4gOiBycHQtPnF1ZXJ5KHBvcywgbWlkICsgMSwgcikpOwogICAgfQp9OwoKc2lnbmVkIG1haW4oKSB7CglpbnQgbjsgY2luID4+IG47Cgl2ZWN0b3I8cGFpcjxwYWlyPGludCwgaW50PiwgaW50Pj4gYShuKTsKCQoJZm9yKGludCBpID0gMDsgaSA8IG47IGkrKyl7CgkJY2luID4+IGFbaV0uZmkuZmkgPj4gYVtpXS5maS5zZSA+PiBhW2ldLnNlOwoJfQoJc29ydChhLmJlZ2luKCksIGEuZW5kKCkpOwoJbm9kZSBsaWNoOwoJbGljaC51cGRhdGUobGluZSgtYVswXS5maXJzdC5maXJzdCwgYVswXS5maXJzdC5maXJzdCAqIGFbMF0uZmlyc3Quc2Vjb25kIC0gYVswXS5zZSkpOwoJbGwgbXggPSBhWzBdLmZpcnN0LmZpcnN0ICogYVswXS5maXJzdC5zZWNvbmQgLSBhWzBdLnNlOwoJCglmb3IoaW50IGkgPSAxOyBpIDwgbjsgaSsrKXsKCQlsbCBkcCA9IGFbaV0uZmlyc3QuZmlyc3QgKiBhW2ldLmZpcnN0LnNlY29uZCArIGxpY2gucXVlcnkoYVtpXS5maXJzdC5zZWNvbmQpIC0gYVtpXS5zZTsKCQkKCQlteCA9IG1heChteCwgZHApOwoJCWxpY2gudXBkYXRlKGxpbmUoLWFbaV0uZmlyc3QuZmlyc3QsIGRwKSk7Cgl9Cgljb3V0IDw8IG14OwoKfQ==