#include <bits/stdc++.h>
#define int long long
using namespace std;
using ii = pair<int, int>;
struct line {
int a, b;
mutable int x; // x-intersect with the next line in the hull
bool operator<(const line& other) const { return a < other.a; }
bool operator<(const int& other_x) const { return x < other_x; }
};
class convex_hull : private multiset<line, less<>> {
static const int inf = 1e18;
public:
int div(int a, int b) { // floored division
return a / b - ((a * b) < 0 && a % b);
}
// (for doubles, use inf = 1/.0, div(a,b) = a/b)
bool overtake(iterator l1, iterator l2) {
if (l2 == end()) return l1->x = inf, false;
// if l2 is NULL, set l1->x and return immediately
if (l1->a == l2->a) l1->x = l1->b > l2->b ? inf : -inf;
// if the two line share the same slope, simply retain the one with the
// higher y-intercept
else
l1->x = div(l2->b - l1->b, l1->a - l2->a);
// x-intersect satisfies (l1->a)*x + l1->b = (l2->a)*x + l2->b
return l1->x >= l2->x;
}
void add(int a, int b) {
auto C = insert({a, b, 0}), N = C, P = C;
overtake(C, ++N); // calculating the x-intersect of C and N
if (C != begin()) {
int backup_p = (--P)->x;
if (overtake(P, C)) { // calculating the x-intersect of C and P
erase(C);
P->x = backup_p;
return;
}
}
while (overtake(C, N))
N = erase(N);
while (1) {
C = P;
if (C == begin()) break;
P--;
if (P->x < C->x) break;
overtake(P, erase(C));
// Since every invalid lines after and including C have been
// removed, erase(C) is actually the originally added line, and we
// recompute line P's p-index using that exact line.
}
}
int query(int x) {
if (empty()) return -inf;
auto l = lower_bound(x);
return l->a * x + l->b;
}
} st;
int32_t main() {
cin.tie(0)->sync_with_stdio(0);
int n;
cin >> n;
vector<ii> a(n);
for (int i = 0; i < n; i++)
cin >> a[i].first >> a[i].second;
sort(a.begin(), a.end());
vector<ii> tmp;
for (const auto& [h, w] : a) {
while (tmp.size() && w >= tmp.back().second)
tmp.pop_back();
tmp.emplace_back(h, w);
}
a.swap(tmp);
int p = 0, res = 0;
for (const auto& [h, w] : a) {
st.add(-w, -p);
int c = -st.query(h);
res = c;
p = c;
}
return cout << res, 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgaW50IGxvbmcgbG9uZwp1c2luZyBuYW1lc3BhY2Ugc3RkOwp1c2luZyBpaSA9IHBhaXI8aW50LCBpbnQ+OwoKc3RydWN0IGxpbmUgewogICAgaW50IGEsIGI7CiAgICBtdXRhYmxlIGludCB4OyAgLy8geC1pbnRlcnNlY3Qgd2l0aCB0aGUgbmV4dCBsaW5lIGluIHRoZSBodWxsCiAgICBib29sIG9wZXJhdG9yPChjb25zdCBsaW5lJiBvdGhlcikgY29uc3QgeyByZXR1cm4gYSA8IG90aGVyLmE7IH0KICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IGludCYgb3RoZXJfeCkgY29uc3QgeyByZXR1cm4geCA8IG90aGVyX3g7IH0KfTsKCmNsYXNzIGNvbnZleF9odWxsIDogcHJpdmF0ZSBtdWx0aXNldDxsaW5lLCBsZXNzPD4+IHsKICAgIHN0YXRpYyBjb25zdCBpbnQgaW5mID0gMWUxODsKCiAgIHB1YmxpYzoKICAgIGludCBkaXYoaW50IGEsIGludCBiKSB7ICAvLyBmbG9vcmVkIGRpdmlzaW9uCiAgICAgICAgcmV0dXJuIGEgLyBiIC0gKChhICogYikgPCAwICYmIGEgJSBiKTsKICAgIH0KICAgIC8vIChmb3IgZG91YmxlcywgdXNlIGluZiA9IDEvLjAsIGRpdihhLGIpID0gYS9iKQoKICAgIGJvb2wgb3ZlcnRha2UoaXRlcmF0b3IgbDEsIGl0ZXJhdG9yIGwyKSB7CiAgICAgICAgaWYgKGwyID09IGVuZCgpKSByZXR1cm4gbDEtPnggPSBpbmYsIGZhbHNlOwogICAgICAgIC8vIGlmIGwyIGlzIE5VTEwsIHNldCBsMS0+eCBhbmQgcmV0dXJuIGltbWVkaWF0ZWx5CgogICAgICAgIGlmIChsMS0+YSA9PSBsMi0+YSkgbDEtPnggPSBsMS0+YiA+IGwyLT5iID8gaW5mIDogLWluZjsKICAgICAgICAvLyBpZiB0aGUgdHdvIGxpbmUgc2hhcmUgdGhlIHNhbWUgc2xvcGUsIHNpbXBseSByZXRhaW4gdGhlIG9uZSB3aXRoIHRoZQogICAgICAgIC8vIGhpZ2hlciB5LWludGVyY2VwdAogICAgICAgIGVsc2UKICAgICAgICAgICAgbDEtPnggPSBkaXYobDItPmIgLSBsMS0+YiwgbDEtPmEgLSBsMi0+YSk7CiAgICAgICAgLy8geC1pbnRlcnNlY3Qgc2F0aXNmaWVzIChsMS0+YSkqeCArIGwxLT5iID0gKGwyLT5hKSp4ICsgbDItPmIKICAgICAgICByZXR1cm4gbDEtPnggPj0gbDItPng7CiAgICB9CgogICAgdm9pZCBhZGQoaW50IGEsIGludCBiKSB7CiAgICAgICAgYXV0byBDID0gaW5zZXJ0KHthLCBiLCAwfSksIE4gPSBDLCBQID0gQzsKCiAgICAgICAgb3ZlcnRha2UoQywgKytOKTsgIC8vIGNhbGN1bGF0aW5nIHRoZSB4LWludGVyc2VjdCBvZiBDIGFuZCBOCgogICAgICAgIGlmIChDICE9IGJlZ2luKCkpIHsKICAgICAgICAgICAgaW50IGJhY2t1cF9wID0gKC0tUCktPng7CiAgICAgICAgICAgIGlmIChvdmVydGFrZShQLCBDKSkgeyAgLy8gY2FsY3VsYXRpbmcgdGhlIHgtaW50ZXJzZWN0IG9mIEMgYW5kIFAKICAgICAgICAgICAgICAgIGVyYXNlKEMpOwogICAgICAgICAgICAgICAgUC0+eCA9IGJhY2t1cF9wOwogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICB3aGlsZSAob3ZlcnRha2UoQywgTikpCiAgICAgICAgICAgIE4gPSBlcmFzZShOKTsKCiAgICAgICAgd2hpbGUgKDEpIHsKICAgICAgICAgICAgQyA9IFA7CiAgICAgICAgICAgIGlmIChDID09IGJlZ2luKCkpIGJyZWFrOwogICAgICAgICAgICBQLS07CiAgICAgICAgICAgIGlmIChQLT54IDwgQy0+eCkgYnJlYWs7CiAgICAgICAgICAgIG92ZXJ0YWtlKFAsIGVyYXNlKEMpKTsKICAgICAgICAgICAgLy8gU2luY2UgZXZlcnkgaW52YWxpZCBsaW5lcyBhZnRlciBhbmQgaW5jbHVkaW5nIEMgaGF2ZSBiZWVuCiAgICAgICAgICAgIC8vIHJlbW92ZWQsIGVyYXNlKEMpIGlzIGFjdHVhbGx5IHRoZSBvcmlnaW5hbGx5IGFkZGVkIGxpbmUsIGFuZCB3ZQogICAgICAgICAgICAvLyByZWNvbXB1dGUgbGluZSBQJ3MgcC1pbmRleCB1c2luZyB0aGF0IGV4YWN0IGxpbmUuCiAgICAgICAgfQogICAgfQoKICAgIGludCBxdWVyeShpbnQgeCkgewogICAgICAgIGlmIChlbXB0eSgpKSByZXR1cm4gLWluZjsKICAgICAgICBhdXRvIGwgPSBsb3dlcl9ib3VuZCh4KTsKICAgICAgICByZXR1cm4gbC0+YSAqIHggKyBsLT5iOwogICAgfQp9IHN0OwoKaW50MzJfdCBtYWluKCkgewogICAgY2luLnRpZSgwKS0+c3luY193aXRoX3N0ZGlvKDApOwogICAgaW50IG47CiAgICBjaW4gPj4gbjsKICAgIHZlY3RvcjxpaT4gYShuKTsKCiAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykKICAgICAgICBjaW4gPj4gYVtpXS5maXJzdCA+PiBhW2ldLnNlY29uZDsKCiAgICBzb3J0KGEuYmVnaW4oKSwgYS5lbmQoKSk7CgogICAgdmVjdG9yPGlpPiB0bXA7CgogICAgZm9yIChjb25zdCBhdXRvJiBbaCwgd10gOiBhKSB7CiAgICAgICAgd2hpbGUgKHRtcC5zaXplKCkgJiYgdyA+PSB0bXAuYmFjaygpLnNlY29uZCkKICAgICAgICAgICAgdG1wLnBvcF9iYWNrKCk7CiAgICAgICAgdG1wLmVtcGxhY2VfYmFjayhoLCB3KTsKICAgIH0KCiAgICBhLnN3YXAodG1wKTsKCiAgICBpbnQgcCA9IDAsIHJlcyA9IDA7CiAgICBmb3IgKGNvbnN0IGF1dG8mIFtoLCB3XSA6IGEpIHsKICAgICAgICBzdC5hZGQoLXcsIC1wKTsKICAgICAgICBpbnQgYyA9IC1zdC5xdWVyeShoKTsKICAgICAgICByZXMgPSBjOwogICAgICAgIHAgPSBjOwogICAgfQoKICAgIHJldHVybiBjb3V0IDw8IHJlcywgMDsKfQo=