rt,代码如下:
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5+5,M = 6e5+5;
int n,lt[N],rt[N],b[M],cnt;
#define get(x) (lower_bound(b+1,b+cnt+1,x)-b)
struct node{
int mx,p,tag;
inline friend node operator + (node x,node y)
{
node res;
if(x.mx>=y.mx) res = x;
else res = y;
res.tag = 0;
return res;
}
}t[M<<2];
#define ls (k<<1)
#define rs (k<<1|1)
#define pushup(k) (t[k] = t[ls]+t[rs])
#define add(k,v) (t[k].mx+=v,t[k].tag+=v,void())
inline void down(int k)
{
if(t[k].tag)
{
add(ls,t[k].tag),add(rs,t[k].tag);
t[k].tag = 0;
}
}
void build(int k,int l,int r)
{
if(l==r) return t[k].p = l,void();
int mid = (l+r)/2;
build(ls,l,mid),build(rs,mid+1,r);
pushup(k);
}
void change(int k,int l,int r,int x,int y,int v)
{
if(l>y||r<x) return;
if(l>=x&&r<=y) return add(k,v);
int mid = (l+r)/2;
down(k);
change(ls,l,mid,x,y,v),change(rs,mid+1,r,x,y,v);
pushup(k);
}
node ask(int k,int l,int r,int x,int y)
{
if(l>y||r<x) return (node){-1,-1,0};
if(l>=x&&r<=y) return t[k];
int mid = (l+r)/2;
down(k);
return ask(ls,l,mid,x,y)+ask(rs,mid+1,r,x,y);
}
vector<int> v[M];
int c[M];
signed main()
{
// freopen(".in","r",stdin);
// freopen(".out","w",stdout);
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
cin>>n;
for(int i = 1;i<=n;i++)
cin>>lt[i]>>rt[i],b[++cnt] = lt[i],b[++cnt] = max(0,lt[i]-1),b[++cnt] = lt[i]+1,b[++cnt] = rt[i],b[++cnt] = min(rt[i]+1,1000000000),b[++cnt] = rt[i]-1;
b[++cnt] = 0,b[++cnt] = 1e9;
sort(b+1,b+cnt+1),cnt = unique(b+1,b+cnt+1)-b-1;
build(1,1,cnt);
// cout<<get(4)<<'\n';
for(int i = 1;i<=n;i++)
{
lt[i] = get(lt[i]),rt[i] = get(rt[i]);
// cout<<lt[i]<<' '<<rt[i]<<'\n';
v[lt[i]].push_back(rt[i]),c[rt[i]]++;
change(1,1,cnt,lt[i]+1,rt[i]-1,1);
}
node res = ask(1,1,cnt,2,cnt);
int ans = res.mx,ansl = 1,ansr = res.p;
for(int i = 2;i<cnt;i++)
{
for(auto j:v[i-1]) change(1,1,cnt,j+1,cnt,1);
for(auto j:v[i]) change(1,1,cnt,i+1,j-1,-1);
change(1,1,cnt,i+1,cnt,-c[i]);
res = ask(1,1,cnt,i+1,cnt);
if(res.mx>ans) ans = res.mx,ansl = i,ansr = res.p;
}
if(ans==0)
{
cout<<"0 1";
return 0;
}
cout<<b[ansl]<<' '<<b[ansr];
return 0;
}