我觉得我写的没啥问题啊/kk,写了个SPJ已经测了10000组+了也没看出来哪错了/kk
#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <algorithm>
#include <cmath>
#include <vector>
#include <set>
#include <map>
#include <stdlib.h>
#include <stack>
#include <queue>
#define ri register int
inline int read() {
int x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9') {if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9') {x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}
return x*f;
}
const int N=2e5+5;
struct node{
int a,b,num;
}ifm[N];
int ans[N],p[N],m[N],n;
bool cmp(node x,node y){
if(x.a==y.a)return x.b<y.b;
return x.a<y.a;
}
void work(){
for(ri i=1;i<=n;i++)m[i]=1e9+7;
int last=1,i;
p[1]=ifm[1].num,m[1]=ifm[1].b,ans[ifm[1].num]=-1;
for(i=2;ifm[i].a==ifm[i-1].a;i++){
ans[ifm[i].num]=-1;
if(m[last]<ifm[i].b)p[i]=p[i-1],m[i]=m[i-1];
else m[i]=ifm[i].b,p[i]=ifm[i].num;
}
for(;i<=n;i++){
if(ifm[i].a>ifm[i-1].a)last=i-1;
// printf("%d %d %d\n",last,p[last],m[last]);
if(m[last]<ifm[i].b)ans[ifm[i].num]=p[last],p[i]=p[i-1],m[i]=m[i-1];
else ans[ifm[i].num]=-1,m[i]=ifm[i].b,p[i]=ifm[i].num;
}
for(ri i=1;i<=n;i++)printf("%d ",ans[i]);
printf("\n");
}
int main(){
int T=read();
while(T--){
n=read();
for(ri i=1;i<=n;i++){
ifm[i].a=read(),ifm[i].b=read(),ifm[i].num=i;
if(ifm[i].a>ifm[i].b)std::swap(ifm[i].a,ifm[i].b);
}
std::sort(ifm+1,ifm+n+1,cmp);
// printf("\n");
// for(ri i=1;i<=n;i++)printf("%d %d\n",ifm[i].a,ifm[i].b);
// printf("\n");
work();
}
return 0;
}