Pagini recente » Cod sursa (job #49277) | Cod sursa (job #488394) | Cod sursa (job #2723877) | Cod sursa (job #2449328) | Cod sursa (job #516715)
Cod sursa(job #516715)
#include <stdio.h>
#include <vector>
#include <algorithm>
#define NMAX 100005
#define pb push_back
using namespace std;
int n;
struct pct{int a,b;};
pct A[NMAX];
int B[NMAX],C[NMAX],r,t,F[NMAX],rez;
vector <int> D[NMAX],E[NMAX];
void read()
{
scanf("%d",&n);
int i;
for (i=1; i<=n; i++)
{
scanf("%d%d",&A[i].a,&A[i].b);
B[++r]=A[i].a;
C[++t]=A[i].b;
}
sort(B+1,B+r+1);
sort(C+1,C+t+1);
}
inline int cb1(int val)
{
int i,step=(1<<16);
for (i=0; step; step>>=1)
if (i+step<=r && B[i+step]<=val)
i+=step;
return i;
}
inline int cb2(int val)
{
int i,step=(1<<16);
for (i=0; step; step>>=1)
if (i+step<=t && C[i+step]<=val)
i+=step;
return i;
}
void normalizare()
{
int i,poz=1;
for (i=2; i<=r; i++)
if (B[i]!=B[i-1])
B[++poz]=B[i];
r=poz;
poz=1;
for (i=2; i<=t; i++)
if (C[i]!=C[i-1])
C[++poz]=C[i];
t=poz;
for (i=1; i<=n; i++)
{
A[i].a=cb1(A[i].a);
A[i].b=cb2(A[i].b);
D[A[i].a].pb(A[i].b);
E[A[i].b].pb(A[i].a);
}
}
inline int min(int x,int y)
{
return x<y ? x : y;
}
inline int max(int x,int y)
{
return x>y ? x : y;
}
void solve()
{
//Ox=1
int i,j,s,y,x,act;
F[1]=n;
for (i=2; i<=t; i++)
{
F[i]=F[i-1];
for (j=0; j<E[i-1].size(); j++)
{
x=E[i][j];
if (x!=1)
F[i]--;
}
}
rez=F[t];
for (i=2; i<=r; i++)
{
//for (j=1; j<=t; j++)
// F[j]-=D[i-1].size();
for (j=0; j<D[i].size(); j++)
{
y=D[i][j];
for (s=y+1; s<=t; s++)
F[s]++;
}
/*for (j=0; j<D[i-1].size(); j++)
{
y=D[i-1][j];
for (s=y; s<=t; s++)
F[s]++;
}*/
for (j=0; j<D[i-1].size(); j++)
{
y=D[i-1][j];
for (s=y-1; s>=1; s--)
F[s]--;
}
act=NMAX;
for (j=1; j<=t; j++)
act=min(act,F[j]);
rez=max(rez,act);
}
}
int main()
{
freopen("cadrane.in","r",stdin);
freopen("cadrane.out","w",stdout);
read();
normalizare();
solve();
printf("%d\n",rez);
return 0;
}