Cod sursa(job #2561672)

Utilizator valentinchipuc123Valentin Chipuc valentinchipuc123 Data 29 februarie 2020 02:13:53
Problema Pachete Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.63 kb
#include <iostream>
#include <fstream>
#include <algorithm>
#include <cmath>


using namespace std;

ifstream f("pachete.in");
ofstream g("pachete.out");

struct cadran{
 int x,y;
};
cadran v1[50005],v2[50005],v3[50005],v4[50005];

bool cmp1(cadran a,cadran b)
 {
  if(a.x==b.x)
    return a.y<b.y;
  return a.x>b.x;
 }
bool cmp2(cadran a,cadran b)
 {
  if(a.x==b.x)
    return a.y>b.y;
  return a.x>b.x;
 }
bool cmp3(cadran a,cadran b)
 {
  if(a.x==b.x)
    return a.y>b.y;
  return a.x<b.x;
 }
bool cmp4(cadran a,cadran b)
 {
  if(a.x==b.x)
    return a.y<b.y;
  return a.x<b.x;
 }

int n,x,y,a,b,nr1,nr2,nr3,nr4,nr,h[50005],lung,val;
int main()
{
f>>n;
f>>x>>y;
for(int i=1;i<=n;i++)
 {
  f>>a>>b;
  if(a<x)
   {
    if(b>y)
     {
      nr1++;
      v1[nr1].x=a; v1[nr1].y=b;
     }
    if(b<y)
     {
      nr2++;
      v2[nr2].x=a; v1[nr1].y=b;
     }
   }
  if(a>x)
   {
    if(b>y)
     {
      nr4++;
      v4[nr4].x=a; v4[nr4].y=b;
     }
    if(b<y)
     {
      nr3++;
      v3[nr3].x=a; v3[nr3].y=b;
     }
   }
 }
sort(v1+1,v1+nr1+1,cmp1);
sort(v2+1,v2+nr2+1,cmp2);
sort(v3+1,v3+nr3+1,cmp3);
sort(v4+1,v4+nr4+1,cmp4);

///cadran1
 {
  int st,dr,mid,rasp;
  nr=0;
  for(int i=1;i<=nr1;i++)
   {
    lung=abs(y-v1[i].y);
    st=1; dr=nr; rasp=nr+1;
    while(st<=dr)
     {
      mid=(st+dr)/2;
      if(h[mid]>lung) st=mid+1;
      else {
            rasp=mid;
            dr=mid-1;
           }
     }
    h[rasp]=lung;
    if(rasp==nr+1) nr++;
   }
  val+=nr;
 }
///cadran2
 {
  int st,dr,mid,rasp;
  nr=0;
  for(int i=1;i<=nr2;i++)
   {
    lung=abs(y-v2[i].y);
    st=1; dr=nr; rasp=nr+1;
    while(st<=dr)
     {
      mid=(st+dr)/2;
      if(h[mid]>lung) st=mid+1;
      else {
            rasp=mid;
            dr=mid-1;
           }
     }
    h[rasp]=lung;
    if(rasp==nr+1) nr++;
   }
  val+=nr;
 }
///cadran3
 {
  int st,dr,mid,rasp;
  nr=0;
  for(int i=1;i<=nr3;i++)
   {
    lung=abs(y-v3[i].y);
    st=1; dr=nr; rasp=nr+1;
    while(st<=dr)
     {
      mid=(st+dr)/2;
      if(h[mid]>lung) st=mid+1;
      else {
            rasp=mid;
            dr=mid-1;
           }
     }
    h[rasp]=lung;
    if(rasp==nr+1) nr++;
   }
  val+=nr;
 }
///cadran4
 {
  int st,dr,mid,rasp;
  nr=0;
  for(int i=1;i<=nr4;i++)
   {
    lung=abs(y-v4[i].y);
    st=1; dr=nr; rasp=nr+1;
    while(st<=dr)
     {
      mid=(st+dr)/2;
      if(h[mid]>lung) st=mid+1;
      else {
            rasp=mid;
            dr=mid-1;
           }
     }
    h[rasp]=lung;
    if(rasp==nr+1) nr++;
   }
  val+=nr;
 }
g<<val;
}