# include <bits/stdc++.h> # define MAX (100000+10) //# define DB # define pt puts("") using namespace std; struct node{ int a, b; node(int x, int y):a(x),b(y){} node(){} friend bool operator <(const node x, const node y){ return x.a < y.a; } friend bool operator <=(const node x, const node y){ return x.a <= y.a; } friend bool operator >(const node x, const node y){ return x.a > y.a; } }; vector<node> ve; map<int, int> mp; vector<int> xita; int preSum[MAX]; int main(){ ios::sync_with_stdio(false); int n; cin>>n; node now; for(int i=0;i<n;++i){ cin>>now.a>>now.b; ve.push_back(now); if(!mp.count(now.a)){ mp[now.a] = 1; xita.push_back(now.a); } } sort(xita.begin(), xita.end() ); sort(ve.begin(), ve.end() ); preSum[0] = ve[0].b; for(int i=1; i<n; ++i){ preSum[i] = preSum[i-1] + ve[i].b; } int len = xita.size(); int j=0; int max=-1, rec; #ifdef DB for(int i=0; i<ve.size(); ++i){ cout << "ve[i].a=" << ve[i].a <<" ve[i].b=" << ve[i].b <<endl; } for(int i=0; i<xita.size(); ++i){ cout << xita[i] << " "; } pt; #endif for(int i=0; i<len; ++i){// get temp xita, xita[i] while(ve[j].a < xita[i] && j < n-1) j++; // cout << "j=" << j << endl; int zero = 0, one = preSum[n-1]; if(j > 0){ zero = (j - preSum[j - 1]); one = preSum[n-1] - preSum[j-1]; } int ans = one + zero; // cout << "zero="<<zero<<" one="<<one<<" ans="<<ans<<endl; if(ans > max){ max = ans; rec = xita[i]; }else if(ans == max){ if(xita[i] > rec) rec = xita[i]; } // cout << "ans = " << ans << endl; } cout << rec << endl; return 0; }