Pagini recente » Cod sursa (job #2404057) | Cod sursa (job #895339) | Cod sursa (job #71560) | Cod sursa (job #2857121) | Cod sursa (job #1153979)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream f("pachete.in");
ofstream g("pachete.out");
int N,Result;
int length1,length2,length3,length4;
long long Final[50005];
struct Point{
long long x;
long long y;
} Cadran1[50005],Cadran2[50005],Cadran3[50005],Cadran4[50005];
long long initiala,initialo;
void Fill_Cadran(long long abs,long long ord)
{
if(abs<initiala && ord>=initialo)
abs=initiala*2-abs,Cadran1[++length1].x=abs,Cadran1[length1].y=ord;
if(abs>=initiala && ord>=initialo)
Cadran2[++length2].x=abs,Cadran2[length2].y=ord;
if(abs<initiala && ord<initialo)
abs=2*initiala-abs,ord=2*initialo-ord,Cadran3[++length3].x=abs,Cadran3[length3].y=ord;
if(abs>=initiala && ord<initialo)
Cadran4[++length4].x=abs,ord=2*initialo-ord,Cadran4[length4].y=ord;
}
void Read()
{
int i;
f>>N;
f>>initiala>>initialo;
for(i=1;i<=N;i++)
{
long long abs,ord;
f>>abs>>ord;
Fill_Cadran(abs,ord);
}
}
inline bool compare(Point a,Point b)
{
if(a.x==b.x)
return a.y<b.y;
return a.x<b.x;
}
void Sort_Arrays()
{
sort(Cadran1+1,Cadran1+length1+1,compare);
sort(Cadran2+1,Cadran2+length2+1,compare);
sort(Cadran3+1,Cadran3+length3+1,compare);
sort(Cadran4+1,Cadran4+length4+1,compare);
}
long long Binary_Search(long long val)
{
long long st=1,dr=Final[0];
long long sol=0;
while(st<=dr)
{
long long mid=(st+dr)/2;
if(val<Final[mid])
st=mid+1;
else
{
dr=mid-1;
sol=mid;
}
}
return sol;
}
void Initialize()
{
for(int i=1;i<=Final[0];i++)
Final[i]=0;
Final[0]=0;
}
void Solve_Cadran(Point Cadran[],int N)
{
if(N==0)
return;
Initialize();
Final[0]=0;
for(int i=1;i<=N;i++)
{
long long pozition=Binary_Search(Cadran[i].y);
if(pozition==0)
Final[++Final[0]]=Cadran[i].y;
else
Final[pozition]=Cadran[i].y;
}
Result+=Final[0];
}
int main()
{
Read();
Sort_Arrays();
Solve_Cadran(Cadran1,length1);
Solve_Cadran(Cadran2,length2);
Solve_Cadran(Cadran3,length3);
Solve_Cadran(Cadran4,length4);
g<<Result<<"\n";
return 0;
}