Cod sursa(job #1642835)

Utilizator ASTELOTudor Enescu ASTELO Data 9 martie 2016 16:26:23
Problema Pachete Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.83 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;
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);
            if(it!=s.begin())
                it--;
            if(*it&&*it<y&&*it>v[i].y)
                s.erase(*it);
            s.insert(v[i].y);
            }
        else
            {
            it=s.lower_bound(v[i].y);
            if(it!=s.begin())
                it--;
            if(*it&&*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++;
s.clear();
for(i=k;i<=n;i++)
    {
    if(s.empty())
        s.insert(v[i].y);
    else
        {
        if(y>v[i].y)
            {
            it=s.lower_bound(v[i].y);
            if(it!=s.begin())
                it--;
            if(*it&&*it<y&&*it>v[i].y)
                s.erase(*it);
            s.insert(v[i].y);
            }
        else
            {
            it=s.lower_bound(v[i].y);
            if(it!=s.begin())
                it--;
            if(*it&&*it>y&&*it<v[i].y)
                s.erase(*it);
            s.insert(v[i].y);
            }
        }
    }
for(it=s.begin();it!=s.end();it++)
    nr++;
printf("%d",nr);
return 0;
}