Cod sursa(job #1640116)

Utilizator ASTELOTudor Enescu ASTELO Data 8 martie 2016 15:56:07
Problema Pachete Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.67 kb
#include<cstdio>
#include<algorithm>
#include<set>
using namespace std;
struct eu{int x,y;};
eu v[50001];
int i,j,n,m,k,x,y;
set<int>:: iterator it;
set<int> s,s1;
bool sorting(eu a,eu b)
    {
    return a.x<b.x;
    }
int main ()
{
freopen("pachete.in","r",stdin);
freopen("pachete.out","w",stdout);
scanf("%d%d%d",&n,&x,&y);
for(i=1;i<=n;i++)
    scanf("%d%d",&v[i].x,&v[i].y);
sort(v+1,v+n+1,sorting);
v[0].x=-1;
for(i=1;i<=n;i++)
    if(v[i].x>x)
        {
        k=i;
        break;
        }
for(i=k-1;i>=1;i--)
    {
    if(s.empty())
        s.insert(v[i].y);
    else
        {
        if(y>v[i].y)
            {
            it=s.lower_bound(v[i].y);
            it--;
            if(*it<y&&*it>v[i].y)
                s.erase(*it);
            s.insert(v[i].y);
            }
        else
            {
            it=s.lower_bound(v[i].y);
            it--;
            if(*it>y&&*it<v[i].y)
                s.erase(*it);
            s.insert(v[i].y);
            }
        }
    }
int nr=0;
for(it=s.begin();it!=s.end();it++)
    nr++;
for(i=k;i<=n;i++)
    {
    if(s1.empty())
        s1.insert(v[i].y);
    else
        {
        if(y>v[i].y)
            {
            it=s1.lower_bound(v[i].y);
            it--;
            if(*it<y&&*it>v[i].y)
                s1.erase(*it);
            s1.insert(v[i].y);
            }
        else
            {
            it=s1.lower_bound(v[i].y);
            it--;
            if(*it>y&&*it<v[i].y)
                s1.erase(*it);
            s1.insert(v[i].y);
            }
        }
    }
for(it=s1.begin();it!=s1.end();it++)
    nr++;
printf("%d",nr);
return 0;
}