题意:
公司每年要解除value最小的女工,然后再照进来一位,当value 同时最小时,开除 标号比较大的那位。
已知N : a[i] 代表 i 号女工的vaue, M:b[i]: 第i年招进来的员工的value
输出 每年开除的员工的标号,以及当前她的value
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<string>
#include<iostream>
#include<set>
#include<algorithm>
using namespace std;
struct node
{
int id;
int x;
node(int id,int x):id(id),x(x){};
friend bool operator < (const node a,const node b)
{
if(a.x==b.x) return a.id>b.id;
else return a.x<b.x;
}
};
set<node>cur;
int main()
{
// freopen("in.in","r",stdin);
int T;
scanf("%d",&T);
while(T--)
{
int n,m;
scanf("%d%d",&n,&m);
cur.clear();
int tp;
for(int i=1;i<=n;i++)
{
scanf("%d",&tp);
cur.insert(node(i,tp));
}
for(int i=0;i<m;i++)
{
node top=*cur.begin();
cur.erase(cur.begin());
printf("%d %d\n",top.id,top.x-i);
scanf("%d",&tp);
cur.insert(node(i+n+1,tp+i+1));
}
}
return 0;
}