Codeforces Round #693 (Div. 3)
E. Correct Placement
排序
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
struct node{
long long h, w;
int n, ans;
};
bool cmp_1(node a, node b) {
if (a.h == b.h) {
return a.w > b.w;
}
else {
return a.h < b.h;
}
}
bool cmp_2(node a, node b) {
return a.n < b.n;
}
int main() {
int t;
cin >> t;
while (t--) {
int n;
cin >> n;
vector<node> num(n);
for (int i = 0; i < n; ++i) {
cin >> num[i].h;
cin >> num[i].w;
num[i].ans = -1;
num[i].n = i;
if (num[i].h > num[i].w) {
long long m = num[i].h;
num[i].h = num[i].w;
num[i].w = m;
}
}
sort(num.begin(), num.end(), cmp_1);
int min = 0;
for (int i = 1; i < n; ++i) {
if (num[i].w > num[min].w) {
num[i].ans = num[min].n+1;
}
if (num[i].w < num[min].w) {
min = i;
}
}
sort(num.begin(), num.end(), cmp_2);
for (int i = 0; i < n; ++i) {
cout << num[i].ans << " ";
}
cout << endl;
}
return 0;
}