func_code_string: #include<bits/stdc++.h>   #define endl   n    #define bug puts( aaa );   #define Case int t;scanf( %d ,&t);while(t--)   #define ios ios::sync_with_stdio(0),cin.tie(0);   using namespace std;   typedef long long ll;   typedef unsigned long long ull;   const double eps = 1e-5;   const int inf = 0x3f3f3f3f;   const int mod = 1e9+7;   const int N = 1e6+10;      int n,x,mi[N<<2],a[N];   unordered_map<int,int>mp;      struct node {    int x,y;   }e[N];         void pushup(int rt) {    mi[rt] = mp[e[mi[rt<<1]].y] > mp[e[mi[rt<<1|1]].y] ? mi[rt<<1|1] : mi[rt<<1];   }      void build(int l,int r,int rt) {    if(l==r) {     mi[rt] = 0;     return;    }    int mid = l+r>>1;    build(l,mid,rt<<1);    build(mid+1,r,rt<<1|1);    pushup(rt);   }      void update(int pos, int val, int l, int r, int rt) {    if(l==r) {     mi[rt] = mp[e[val].y] < mp[e[mi[rt]].y] ? val : mi[rt];     return;    }    int mid = l+r>>1;    if(pos <= mid) update(pos,val,l,mid,rt<<1);    else update(pos,val,mid+1,r,rt<<1|1);    pushup(rt);   }      int query(int L,int R,int l,int r,int rt) {    if(L<=l && r<=R) {     return mi[rt];    }    int mid = l+r>>1;    int lson = 0,rson = 0;    if(L <= mid) lson = query(L,R,l,mid,rt<<1);    if(R > mid) rson = query(L,R,mid+1,r,rt<<1|1);    return mp[e[lson].y] > mp[e[rson].y] ?rson:lson;   }      void run() {    mp.clear();    scanf( %d ,&n);    int x,y,range = 0,idx=0;    e[0].x = e[0].y = inf;    mp[inf] = inf;    for (int i=1;i<=n;i++) {     scanf( %d %d ,&e[i].x,&e[i].y);     a[++idx] = e[i].x;     a[++idx] = e[i].y;        /**      * 如果不交换,只符合hj<hi && wj<wi的情况      * 首先按把w和h大的那个，放在x位置      * 那么我们去找[1,x-1]区间，里面的x肯定满足条件      * 接着在这个区间中去找符合条件的y,      */     if(e[i].x > e[i].y) swap(e[i].x,e[i].y);    }       /**     * 离散化     */    sort(a+1,a+idx+1);    for (int i=1;i<=idx;i++) {     if(mp[a[i]])continue;     mp[a[i]] = ++range;    }             build(1,range,1);    for (int i=1;i<=n;i++) {     update(mp[e[i].x],i,1,range,1);    }    for (int i=1;i<=n;i++) {     if(mp[e[i].x] == 1) {      printf( -1  );      continue;     }     int res = query(1,mp[e[i].x]-1,1,range,1);     if (e[res].y >= e[i].y) {      printf( -1  );     } else {      printf( %d  ,res);     }    }    printf(  n );   }         int main() {    // freopen( input.txt , r ,stdin);    // freopen( output.txt , w ,stdout);    Case    run();    return 0;   }