http://codeforces.com/problemset/problem/23/C
/**
CF23C 思维
题目大意:给定2*n-1个箱子,里面有ai的苹果,oi的橘子,问怎样选出n个使得橘子苹果的数量和都不小于总数的一半
解题思路:一开始按照x排序,那么从取到的第2个箱子开始,不会比上一次舍去的箱子里的x的数量少,再加上取得第一个箱子里面的x
说明x肯定比总数的一半多;y的话,每次两个里面取走一个大的,取得总数肯定不会比舍去的少。
这样取保证有解。
*/
#include <stdio.h>
#include <string.h>
#include <algorithm>
#include <iostream>
using namespace std;
const int maxn=200004;
struct note
{
int x,y,ip;
}a[maxn];
bool cmp(note a,note b)
{
if(a.x==b.x)
return a.y<b.y;
return a.x<b.x;
}
int n,ans[maxn];
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
for(int i=1;i<=2*n-1;i++)
{
scanf("%d%d",&a[i].x,&a[i].y);
a[i].ip=i;
}
sort(a+1,a+n*2,cmp);
int k=0;
for(int i=1;i<2*n-1;i+=2)
{
if(a[i].y>=a[i+1].y)
ans[k++]=a[i].ip;
else
ans[k++]=a[i+1].ip;
}
ans[k++]=a[2*n-1].ip;
puts("YES");
sort(ans,ans+k);
for(int i=0;i<k;i++)
printf(i==k-1?"%d\n":"%d ",ans[i]);
}
return 0;
}