```cpp
#include<bits/stdc++.h>
#define int long long
#define mem(x,y) memset(x,y,sizeof(x))
using namespace std;
int read(){
int s = 0,w = 1;
char ch = getchar();
while(ch < '0' || ch > '9'){if(ch == '-')w = -1;ch = getchar();}
while(ch >= '0' && ch <= '9')s = s * 10 + ch - '0',ch = getchar();
return s * w;
}
struct node{
int col;
int w;
}e[100010],e1[100010];
int n;
int bl[100010],br[100010];
int cnt;
int tot;
int ans = 2147483647;
int cntt;
bool cmp(node x,node y){
if(x.col != y.col)return x.col < y.col;
else return x.w < y.w;
}
signed main(){
cin>>n;
for(int i = 1;i <= n;i ++)e1[i].col = read(),e1[i].w = read();
sort(e1 + 1,e1 + n + 1,cmp);
for(int i = 1;i <= n;i ++){
if(e1[i].col != e1[i - 1].col || e1[i].w != e1[i - 1].w){
cntt ++;
e[cntt].col = e1[i].col;
e[cntt].w = e1[i].w;
}
}
for(int i = 1;i <= cntt;i ++){
if(e[i].col != e[i - 1].col){
br[cnt] = i - 1;
cnt ++;
bl[cnt] = i;
}
}
br[cnt] = cntt;
//for(int i = 1;i <= cnt;i ++)cout<<bl[i]<<" to "<<br[i]<<endl;
for(int i = 1;i <= cnt;i ++){
for(int j = bl[i];j <= br[i];j ++){
if(e[j].w < n)continue;
int s,s1;
int l,r,mid;
l = bl[i],r = j;
int num = e[j].w - n + 1;
while(l <= r){
mid = (l + r) / 2;
if(e[mid].w >= num)r = mid - 1,s = mid;
else l = mid + 1;
}
s = l;
s1 = j;
// cout<<"s = "<<s<<endl<<"s1 = "<<s1<<endl;
ans = min(ans,n - (s1 - s + 1));
}
}
cout<<ans;
}
```
by EDqwq @ 2021-06-02 23:39:45