point2D
NguyenAnhQuan
c_cpp
2 years ago
1.0 kB
9
Indexable
#include <iostream>
#include <cstdlib>
#define LIM 1000000
#define X first
#define Y second
#define EL cout << "\n";
using namespace std;
int n;
pair <int, int> a[LIM + 5];
int cpr(pair <int, int> x, pair <int, int> y) {
if (x.X <= y.X) {
if (x.X < y.X) {
return -1;
}
else {
if (x.Y > y.Y) {
return -1;
}
else if (x.Y < y.Y) {
return 1;
}
}
}
else {
return 1;
}
return 0;
}
void qs(int l, int r)
{
int i = l, j = r;
pair <int, int> p = a[l + rand() % (r - l + 1)];
while (i <= j) {
//while (a[i] < p) i++;
while (cpr(a[i], p) == -1) i++;
//while (a[j] > p) j--;
while (cpr(a[j], p) == 1) j--;
if (i <= j) {
swap(a[i], a[j]);
i++; j--;
}
}
if (j > l) qs(l, j);
if (i < r) qs(i, r);
}
int main() {
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
//Input
cin >> n;
for (int i = 1; i <= n; i++)
cin >> a[i].X >> a[i].Y;
qs(1, n);
// Output
for (int i = 1; i <= n; i++)
cout << a[i].X << " " << a[i].Y << "\n";
// cout << cpr({1, 1}, {2, 1});
return 0;
}Editor is loading...
Leave a Comment