Pagini recente » Cod sursa (job #892669) | Cod sursa (job #2964152) | Cod sursa (job #1940581) | Cod sursa (job #2859772) | Cod sursa (job #2561669)
#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;
bool OK1=0,OK2=0,OK3=0,OK4=0;
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(b==y)
OK1=1;
}
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;
}
if(b==y)
OK2=1;
}
if(a==x)
{
if(b<y)
OK3=1;
if(b>y)
OK4=1;
}
}
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-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;
}
val+=OK1+OK2+OK3+OK4;
g<<val;
}