Pagini recente » Rating Ciprian Nicolae Lazaroaia (donut) | Cod sursa (job #3254297) | Cod sursa (job #3261010) | Cod sursa (job #3174927) | Cod sursa (job #3222812)
#include <fstream>
#include <cmath>
#include <algorithm>
#include <vector>
using namespace std;
#define int long long
ifstream in("pachete.in");
ofstream out("pachete.out");
int n, ans, cnt;
int ox, oy;
vector<pair<int, int>> v1;
vector<pair<int, int>> v2;
vector<pair<int, int>> v3;
vector<pair<int, int>> v4;
int vec[50005];
bool crescator(const pair<int, int> &a, const pair<int, int> &b)
{
return a.first < b.first;
}
bool descrescator(const pair<int, int> &a, const pair<int, int> &b)
{
return a.first > b.first;
}
int cauta(int x)
{
int st = 1;
int dr = cnt;
int ans = -1;
int mij;
while(st <= dr)
{
mij = (st + dr) / 2;
if(vec[mij] <= x)
{
ans = mij;
dr = mij - 1;
}
else
{
st = mij + 1;
}
}
return ans;
}
signed main()
{
in>>n;
in>>ox>>oy;
int x, y;
for(int i = 1; i<=n; i++)
{
in>>x>>y;
if(x >= ox && y >= oy)
{
v1.push_back({x, y});
}
else if(x < ox && y >= oy)
{
v2.push_back({-x, y});
}
else if(x <= ox && y < oy)
{
v3.push_back({-x, -y});
}
else
{
v4.push_back({x, -y});
}
}
sort(v1.begin(), v1.end());
sort(v2.begin(), v2.end());
sort(v3.begin(), v3.end());
sort(v4.begin(), v4.end());
for(int i = 0; i<v1.size(); i++)
{
if(i == 0)
{
cnt++;
vec[cnt] = v1[i].second;
}
else
{
int poz = cauta(v1[i].second);
if(poz == -1)
{
cnt++;
vec[cnt] = v1[i].second;
}
else
{
vec[poz] = v1[i].second;
}
}
}
ans += cnt;
cnt = 0;
for(int i = 0; i<v2.size(); i++)
{
if(i == 0)
{
cnt++;
vec[cnt] = v2[i].second;
}
else
{
int poz = cauta(v2[i].second);
if(poz == -1)
{
cnt++;
vec[cnt] = v2[i].second;
}
else
{
vec[poz] = v2[i].second;
}
}
}
ans += cnt;
//out<<cnt<<'\n';
cnt = 0;
for(int i = 0; i<v3.size(); i++)
{
if(i == 0)
{
cnt++;
vec[cnt] = v3[i].second;
}
else
{
int poz = cauta(v3[i].second);
if(poz == -1)
{
cnt++;
vec[cnt] = v3[i].second;
}
else
{
vec[poz] = v3[i].second;
}
}
}
ans += cnt;
//out<<cnt<<'\n';
cnt = 0;
for(int i = 0; i<v4.size(); i++)
{
if(i == 0)
{
cnt++;
vec[cnt] = v4[i].second;
}
else
{
int poz = cauta(v4[i].second);
if(poz == -1)
{
cnt++;
vec[cnt] = v4[i].second;
}
else
{
vec[poz] = v4[i].second;
}
}
}
ans += cnt;
//out<<cnt<<'\n';
out<<ans;
return 0;
}