module main; // https://yukicoder.me/submissions/18447 より // 三分探索 import std; // aとbを比較してbの方が小さいならばaの値をbに更新する void chMin(T)(ref T a, in T b) { if (a > b) a = b; } // aとbを比較してbの方が大きいならばaの値をbに更新する void chMax(T)(ref T a, in T b) { if (a < b) a = b; } int N; long[] A, B; long diff(long x) { long max = 0, min = long.max; foreach (a, b; lockstep(A, B)) { long num = a + b * x; chMax(max, num); chMin(min, num); } return max - min; } void main() { // 入力 N = readln.chomp.to!int; A = new long[](N); B = new long[](N); foreach (ref a, ref b; lockstep(A, B)) readln.chomp.formattedRead("%d %d", a, b); // 答えの計算 long low = 1, high = 10L ^^ 9; if (B.maxElement == B.minElement) high = 2; while (high - low > 3) { long mid1 = (low + low + high) / 3; long mid2 = (low + high + high) / 3; if (diff(mid1) <= diff(mid2)) high = mid2; else low = mid1; } long res = 10L ^^ 18; long ans = 0; foreach (i; max(low - 30, 1) .. low + 31) { long r = diff(i); if (res > r) { res = r; ans = i; } } // 答えの出力 writeln(ans); }