Pagini recente » Cod sursa (job #3171026) | Cod sursa (job #3128587) | Cod sursa (job #2900454) | Cod sursa (job #2283901) | Cod sursa (job #491903)
Cod sursa(job #491903)
#include <stdio.h>
#include <vector>
#include <algorithm>
#define NMAX 100005
#define pb push_back
using namespace std;
struct pct
{
int a,b;
};
pct A[NMAX],ord[NMAX];
int n,C[NMAX],D[NMAX],r,t,rez,S1[NMAX],S2[NMAX];
vector <int> E[NMAX],F[NMAX];
void read()
{
scanf("%d",&n);
int i;
for (i=1; i<=n; i++)
{
scanf("%d%d",&A[i].a,&A[i].b);
C[++r]=A[i].a; D[++t]=A[i].b;
}
}
int cbin1(int x)
{
int i,step=(1<<16);
for (i=0; step; step>>=1)
if (i+step<=r && C[i+step]<=x)
i+=step;
return i;
}
int cbin2(int x)
{
int i,step=(1<<16);
for (i=0; step; step>>=1)
if (i+step<=t && D[i+step]<=x)
i+=step;
return i;
}
void normalizare()
{
int i,poz=1;
sort(C+1,C+r+1);
sort(D+1,D+t+1);
for (i=2; i<=r; i++)
if (C[i]!=C[i-1])
C[++poz]=C[i];
r=poz;
poz=1;
for (i=2; i<=t; i++)
if (D[i]!=D[i-1])
D[++poz]=D[i];
t=poz;
for (i=1; i<=n; i++)
{
A[i].a=cbin1(A[i].a);
A[i].b=cbin2(A[i].b);
E[A[i].a].pb(i);
F[A[i].b].pb(i);
}
}
inline int min(int x,int y)
{
return x<y ? x : y;
}
void solve()
{
int i,j,k,act,nr,poz;
for (i=1; i<=t; i++)
{
act=NMAX;
for (j=1; j<=r; j++)
{
S1[j]=S1[j-1];
for (k=0; k<E[j].size(); k++)
{
poz=E[j][k];
if (A[poz].b>i)
S1[j]++;
}
}
for (j=r; j>=1; j--)
{
S2[j]=S2[j+1];
for (k=0; k<E[j].size(); k++)
{
poz=E[j][k];
if (A[poz].b<i)
S2[j]++;
}
}
for (j=1; j<=r; j++)
{
nr=S1[j]+S2[j]+F[i].size();
act=min(act,nr);
}
if (rez<act)
rez=act;
}
}
int main()
{
freopen("cadrane.in","r",stdin);
freopen("cadrane.out","w",stdout);
read();
normalizare();
solve();
printf("%d\n",rez-1);
return 0;
}