1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
| # include <algorithm> # include <iostream> # include <cstring> # include <cstdio> # include <cmath> # include <vector> # define R register
using namespace std;
int n,c[100010],cnt,ans; struct zx{int x,y;}a[100010]; vector <int> ca[100010];
template <typename T> void in(R T &a){ R char c = getchar();R T x=0,f=1; while(!isdigit(c)){if(c == '-') f=-1; c = getchar();} while(isdigit(c)) x = (x<<1)+(x<<3)+c-'0',c = getchar(); a = x*f; }
inline bool cmp(zx a,zx b){return a.x<b.x||(a.x==b.x&&a.y<b.y);} inline void maxx(R int &a,const int b){a>b? 0:a=b;}
int main(){ freopen("card.in","r",stdin); freopen("card.out","w",stdout); in(n); for(R int i=1; i<=n; ++i) in(a[i].x),in(a[i].y); sort(a+1,a+n+1,cmp); for(R int i=1; i<=n; ++i) c[i] = a[i].x; for(R int i=1; i<=n; ++i) { if(c[i] != c[i-1]) cnt++,ca[cnt].push_back(0); if(a[i].x==a[i-1].x&&a[i].y!=a[i-1].y) ca[cnt].push_back(a[i].y); } for(R int i=1; i<=cnt; ++i){ R int now = 0; for(R int j=1; j<ca[i].size(); ++j) { while(ca[i][now]<ca[i][j]-n+1) now++; maxx(ans,j-now+1); } } printf("%d",n-ans); }
|