时隔一年,蒟蒻也有了板子,现在看这种题就像签到题了
//太好了,炜神只用了1.14514秒就完成了这题,我又双叒叕可以copyyyyyy了
#pragma GCC optimize(3)
#include<bits/stdc++.h>
#define fi first
#define se second
#define lc p << 1
#define rc p << 1 | 1
#define lowbit(x) x & -x
#define inv(x) qmi(x, P - 2)
using namespace std;
typedef long long ll;
typedef double db;
typedef pair<int,int> pii;
typedef pair<ll, ll> pll;
typedef pair<db, db> pdd;
const int N = 2e5 + 10, M = 2 * N;
const int inf = 0x3f3f3f3f;
const ll INF = 0x3f3f3f3f3f3f;
const double PI = 3.141592653589793;
const int dx[] = {-1, 0, 1, 1, 1, 0, -1, -1};
const int dy[] = {1, 1, 1, 0, -1, -1, -1, 0};//奇数位置是上下左右
const int P = 998244353;
int T = 1;
ll primes[N], p_vis[N], p_cnt = 1;
ll fact[N];
void normalMath_init(){
fact[0] = 1;
for(int i = 1; i < N; i ++) fact[i] = fact[i - 1] * i % P;
p_vis[0] = p_vis[1] = -1;
for(int i = 2; i < N; i ++){
if(!p_vis[i]) primes[p_cnt ++] = i;
for(int j = 1; primes[j] * i < N; j ++){
p_vis[i * primes[j]] = 1;
if(i % primes[j] == 0) break;
}
}
}
ll qmi(ll a, ll b){
ll res = 1;
while(b){
if(b & 1) res = res * a % P;
b >>= 1;
a = a * a % P;
}
return res;
}
ll C(ll b, ll a){
return fact[b] * inv(fact[a]) % P * inv(fact[b - a]) % P;
}
ll gcd(ll a, ll b){
return b ? gcd(b, a % b) : a;
}
void solve(){
ll n;
cin >> n;
vector<ll> a(n + 10), b(n + 10);
ll l = 1, r = inf;
for(int i = 1; i <= n; i ++) cin >> a[i] >> b[i], r = min(r, a[i] / b[i]);
function<int(ll, int)> check = [&](ll mid, int st) -> int{
for(int i = 1; i <= n; i ++){
ll t = a[i] / mid;
if(!st && t > b[i]) return 0;
if(st && t < b[i]) return 0;
}
return 1;
};
ll br = r;
while(l < r){
ll mid = l + r >> 1;
if(check(mid, 0)) r = mid;
else l = mid + 1;
}
cout << l << ' ';
l = br, r = inf;
while(l < r){
int mid = l + r + 1 >> 1;
if(check(mid, 1)) l = mid;
else r = mid - 1;
}
cout << l << '\n';
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0), cout.tie(0);
normalMath_init();
//cin >> T;
while(T --){
solve();
}
return 0;
}