#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> ii;
const int INF = 1e9;
const ll LINF = 1e18;
const int N = 1e4 + 5;
int n;
int c[N], t[N];
// Nhận xét: Với thời gian càng lớn thì khoảng cách đi được của mỗi cảnh sát càng lớn => càng có khả năng để sắp xếp được
// => Có thể tìm kiếm nhị phân đáp án cho bài này
// Giả sử thời điểm cần check là mid, thì với cảnh sát thứ i thì ta biết được đoạn [l(i), r(i)] mà họ có thể di chuyển đến.
// Còn việc điều động mỗi cảnh sát thì ta có thể dùng ý tưởng tham lam như sau:
// Tại nút thứ i, ta sẽ chọn cảnh sát có đầu mút r nhỏ nhất trong số các cảnh sát chưa được điều động mà có thể đến được nút này.
vector<int> R[N]; // R[l]: danh sách các đầu mút r của các cảnh sát có đầu mút di chuyển trái nhất l
bool check(int mid) {
for (int i = 1; i <= n; i++) R[i].clear();
for (int i = 1; i <= n; i++) {
int d = mid / t[i];
int l = max(1, c[i] - d), r = min(n, c[i] + d);
R[l].push_back(r);
}
priority_queue<int, vector<int>, greater<int>> pq;
for (int i = 1; i <= n; i++) {
for (int r : R[i]) pq.push(r);
while (!pq.empty() && pq.top() < i) pq.pop();
if (pq.empty()) return false;
pq.pop();
}
return true;
}
int main() {
ios::sync_with_stdio(0); cin.tie(0);
cin >> n;
for (int i = 1; i <= n; i++) cin >> c[i] >> t[i];
int l = 0, r = 1e8, ans = -1;
while (l <= r) {
int mid = (l + r) >> 1;
if (check(mid)) {
ans = mid;
r = mid - 1;
}
else {
l = mid + 1;
}
}
cout << ans << '\n';
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+IAp1c2luZyBuYW1lc3BhY2Ugc3RkOyAgCgp0eXBlZGVmIGxvbmcgbG9uZyBsbDsgIAp0eXBlZGVmIHBhaXI8aW50LCBpbnQ+IGlpOyAgCgpjb25zdCBpbnQgSU5GID0gMWU5OyAgCmNvbnN0IGxsIExJTkYgPSAxZTE4OyAgCgpjb25zdCBpbnQgTiA9IDFlNCArIDU7IAoKaW50IG47IAppbnQgY1tOXSwgdFtOXTsgCgovLyBOaOG6rW4geMOpdDogVuG7m2kgdGjhu51pIGdpYW4gY8OgbmcgbOG7m24gdGjDrCBraG/huqNuZyBjw6FjaCDEkWkgxJHGsOG7o2MgY+G7p2EgbeG7l2kgY+G6o25oIHPDoXQgY8OgbmcgbOG7m24gPT4gY8OgbmcgY8OzIGto4bqjIG7Eg25nIMSR4buDIHPhuq9wIHjhur9wIMSRxrDhu6NjCi8vID0+IEPDsyB0aOG7gyB0w6xtIGtp4bq/bSBuaOG7iyBwaMOibiDEkcOhcCDDoW4gY2hvIGLDoGkgbsOgeQovLyBHaeG6oyBz4butIHRo4budaSDEkWnhu4NtIGPhuqduIGNoZWNrIGzDoCBtaWQsIHRow6wgduG7m2kgY+G6o25oIHPDoXQgdGjhu6kgaSB0aMOsIHRhIGJp4bq/dCDEkcaw4bujYyDEkW/huqFuIFtsKGkpLCByKGkpXSBtw6AgaOG7jSBjw7MgdGjhu4MgZGkgY2h1eeG7g24gxJHhur9uLgovLyBDw7JuIHZp4buHYyDEkWnhu4F1IMSR4buZbmcgbeG7l2kgY+G6o25oIHPDoXQgdGjDrCB0YSBjw7MgdGjhu4MgZMO5bmcgw70gdMaw4bufbmcgdGhhbSBsYW0gbmjGsCBzYXU6IAovLyBU4bqhaSBuw7p0IHRo4bupIGksIHRhIHPhur0gY2jhu41uIGPhuqNuaCBzw6F0IGPDsyDEkeG6p3UgbcO6dCByIG5o4buPIG5o4bqldCB0cm9uZyBz4buRIGPDoWMgY+G6o25oIHPDoXQgY2jGsGEgxJHGsOG7o2MgxJFp4buBdSDEkeG7mW5nIG3DoCBjw7MgdGjhu4MgxJHhur9uIMSRxrDhu6NjIG7DunQgbsOgeS4gCgp2ZWN0b3I8aW50PiBSW05dOyAvLyBSW2xdOiBkYW5oIHPDoWNoIGPDoWMgxJHhuqd1IG3DunQgciBj4bunYSBjw6FjIGPhuqNuaCBzw6F0IGPDsyDEkeG6p3UgbcO6dCBkaSBjaHV54buDbiB0csOhaSBuaOG6pXQgbAoKYm9vbCBjaGVjayhpbnQgbWlkKSB7Cglmb3IgKGludCBpID0gMTsgaSA8PSBuOyBpKyspIFJbaV0uY2xlYXIoKTsgIAoKCWZvciAoaW50IGkgPSAxOyBpIDw9IG47IGkrKykgewoJCWludCBkID0gbWlkIC8gdFtpXTsgICAKCQlpbnQgbCA9IG1heCgxLCBjW2ldIC0gZCksIHIgPSBtaW4obiwgY1tpXSArIGQpOyAgCgkJUltsXS5wdXNoX2JhY2socik7IAoJfQoKCXByaW9yaXR5X3F1ZXVlPGludCwgdmVjdG9yPGludD4sIGdyZWF0ZXI8aW50Pj4gcHE7ICAKCWZvciAoaW50IGkgPSAxOyBpIDw9IG47IGkrKykgewoJCWZvciAoaW50IHIgOiBSW2ldKSBwcS5wdXNoKHIpOyAgCgkJd2hpbGUgKCFwcS5lbXB0eSgpICYmIHBxLnRvcCgpIDwgaSkgcHEucG9wKCk7ICAgCgkJaWYgKHBxLmVtcHR5KCkpIHJldHVybiBmYWxzZTsgCgkJcHEucG9wKCk7IAoJfQoKCXJldHVybiB0cnVlOyAKfQoKaW50IG1haW4oKSB7Cglpb3M6OnN5bmNfd2l0aF9zdGRpbygwKTsgY2luLnRpZSgwKTsgIAkKCWNpbiA+PiBuOyAKCWZvciAoaW50IGkgPSAxOyBpIDw9IG47IGkrKykgY2luID4+IGNbaV0gPj4gdFtpXTsgCgoJaW50IGwgPSAwLCByID0gMWU4LCBhbnMgPSAtMTsgCgl3aGlsZSAobCA8PSByKSB7CgkJaW50IG1pZCA9IChsICsgcikgPj4gMTsgCgoJCWlmIChjaGVjayhtaWQpKSB7CgkJCWFucyA9IG1pZDsgIAoJCQlyID0gbWlkIC0gMTsgCgkJfQoJCWVsc2UgewoJCQlsID0gbWlkICsgMTsgCgkJfQoJfSAKCgljb3V0IDw8IGFucyA8PCAnXG4nOyAKfQ==