标签:
4 8 4 1 3 2 2 1 0 3 5 3 6 4 2 1 7 6 8 3 3 2 0 5 0 3 6 4 5 2 7 7 6 7 6 8 2 2 3 3 3 0 0 2 7 4 3 6 3 2 2 5 8 5 6 5 3 3 1 2 4 6 7 7 6 5 4 3 5
7 1 7 6 5 2 4 3 8 8 4 6 3 1 2 5 8 7 7 3 6 7 1 5 2 8 4 0 1 2 3 4 5 6 7 8
#include<iostream>
#include<algorithm>
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<queue>
using namespace std;
struct node
{
int x;
int y;
int z;
} p[100010];
int a[100010];
int v[100010];
int n;
bool cmp(node a,node b)
{
if(a.x == b.x)
{
return a.y<b.y;
}
return a.x < b.x;
}
bool operator < (const node &a, const node &b)
{
if(a.y == b.y)
{
return a.x > b.x;
}
return a.y > b.y;
}
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
for(int i=0; i<n; i++)
{
scanf("%d",&p[i].x);
p[i].z = i+1;
}
for(int i=0; i<n; i++)
{
scanf("%d",&p[i].y);
}
memset(v,0,sizeof(v));
sort(p,p+n,cmp);
priority_queue<node>q;
while(!q.empty())
{
q.pop();
}
int sum = 0;
for(int i=0; i<n; i++)
{
if(sum >= p[i].x)
{
q.push(p[i]);
}
else
{
i--;
while(!q.empty() && (q.top().y<sum))
{
struct node f = q.top();
q.pop();
}
if(q.size() == 0)
{
break;
}
else
{
sum++;
a[sum] = q.top().z;
q.pop();
v[a[sum]] = 1;
}
}
}
while(!q.empty())
{
if(sum>q.top().y)
{
q.pop();
}
else
{
sum++;
a[sum] = q.top().z;
q.pop();
v[a[sum]] = 1;
}
}
printf("%d\n",sum);
if(sum == 0)
{
for(int i=1; i<=n; i++)
{
if(i == n)
{
printf("%d\n",i);
}
else
{
printf("%d ",i);
}
}
}
else
{
for(int i=1;i<=n;i++)
{
if(v[i] == 0)
{
printf("%d ",i);
}
}
for(int i=1;i<=sum;i++)
{
if(i == sum)
{
printf("%d\n",a[i]);
}
else
{
printf("%d ",a[i]);
}
}
}
}
return 0;
}版权声明:本文为博主原创文章,如有特殊需要请与博主联系 QQ : 793977586。
标签:
原文地址:http://blog.csdn.net/yeguxin/article/details/47335641