Cod sursa(job #1934483)

Utilizator tgm000Tudor Mocioi tgm000 Data 21 martie 2017 16:05:03
Problema Pachete Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.94 kb
#include<cstdio>
#include<algorithm>
#include<set>
using namespace std;
struct punct{int x,y;};
punct a[50001];
bool cmp(punct a,punct b){
   if(a.x<b.x)
      return true;
   else if(a.x>b.x)
      return false;
   else if(a.y<b.y)
      return true;
   else
      return false;
}
set <int> s;
set <int>::iterator it;
int main(){
   int n,xp,yp,nr,k,i,c,d,x,y;
   freopen("pachete.in","r",stdin);
   freopen("pachete.out","w",stdout);
   nr=0;

   //cadranul 1
   scanf("%d%d%d",&n,&xp,&yp);
   k=0;
   for(i=1;i<=n;i++){
      scanf("%d%d",&x,&y);
      x-=xp;
      x-=yp;
      if(x>0&&y>0){
         k++;
         a[k].x=x;
         a[k].y=y;
      }
   }
   if(k!=0){
      sort(a+1,a+k+1,cmp);
      s.insert(a[1].y);
      for(i=2;i<=k;i++){
         it=s.begin();
         if(a[i].y<*it)
            s.insert(a[i].y);
         else{
            it=s.lower_bound(a[i].y);
            it--;
            s.erase(it);
            s.insert(a[i].y);
         }
      }
      nr+=s.size();
   }
   s.clear();

   //cadranul 2
   freopen("pachete.in","r",stdin);
   scanf("%d%d%d",&n,&xp,&yp);
   k=0;
   for(i=1;i<=n;i++){
      scanf("%d%d",&x,&y);
      x-=xp;
      y-=yp;
      if(x<0&&y>0){
         k++;
         a[k].x=-x;
         a[k].y=y;
      }
   }
   if(k!=0){
      sort(a+1,a+k+1,cmp);
      s.insert(a[1].y);
      for(i=2;i<=k;i++){
         it=s.begin();
         if(a[i].y<*it)
            s.insert(a[i].y);
         else{
            it=s.lower_bound(a[i].y);
            it--;
            s.erase(it);
            s.insert(a[i].y);
         }
      }
      nr+=s.size();
   }
   s.clear();

   //cadranul 3
   freopen("pachete.in","r",stdin);
   scanf("%d%d%d",&n,&xp,&yp);
   k=0;
   for(i=1;i<=n;i++){
      scanf("%d%d",&x,&y);
      x-=xp;
      y-=yp;
      if(x<0&&y<0){
         k++;
         a[k].x=-x;
         a[k].y=-y;
      }
   }
   if(k!=0){
      sort(a+1,a+k+1,cmp);
      s.insert(a[1].y);
      for(i=2;i<=k;i++){
         it=s.begin();
         if(a[i].y<*it)
            s.insert(a[i].y);
         else{
            it=s.lower_bound(a[i].y);
            it--;
            s.erase(it);
            s.insert(a[i].y);
         }
      }
      nr+=s.size();
   }
   s.clear();

   //cadranul 4
   freopen("pachete.in","r",stdin);
   scanf("%d%d%d",&n,&xp,&yp);
   k=0;
   for(i=1;i<=n;i++){
      scanf("%d%d",&x,&y);
      x-=xp;
      y-=yp;
      if(x>0&&y<0){
         k++;
         a[k].x=x;
         a[k].y=-y;
      }
   }
   if(k!=0){
      sort(a+1,a+k+1,cmp);
      s.insert(a[1].y);
      for(i=2;i<=k;i++){
         it=s.begin();
         if(a[i].y<*it)
            s.insert(a[i].y);
         else{
            it=s.lower_bound(a[i].y);
            it--;
            s.erase(it);
            s.insert(a[i].y);
         }
      }
      nr+=s.size();
   }
   s.clear();

   printf("%d",nr);
   return 0;
}