我只是觉得人云亦云的写二分不好,这个题看了看数据范围,果然最快的方法还是暴力枚举吧。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<algorithm>
int n;
int f[1001000],next[1001000];
bool flag[1001000];
using namespace std;
int main()
{
freopen("test.in","r",stdin);
int x,y,tot=0;
memset(f,0,sizeof(f));
memset(next,0,sizeof(next));
memset(flag,0,sizeof(flag));
int ans=200000000,limitx=0;
scanf("%d",&n);
for (int i=1;i<=n;i++)
{
scanf("%d %d",&x,&y);
next[x]=x-y;
flag[x]=true;
}
for (int i=0;i<=1000100;i++)
{
if (flag[i]==false)
{
if (i==0) f[i]=0;
else f[i]=f[i-1];
continue;
}
tot++;
if (next[i]-1<0)
f[i]=1;
else
f[i]=f[next[i]-1]+1;
ans=min(ans,n-f[i]);
}
printf("%d",ans);
return 0;
}