hdu5437 优先队列 长春网赛

优先队列做,然后遍历人数。

#include <queue>
#include <stdio.h>
#include <string.h>
#define maxn 150010
using namespace std;
struct node
{
    int id;
    int val;
    friend bool operator < (node a ,node b){
        if(a.val==b.val)
            return a.id > b.id;
        return a.val < b.val;
    }
}a[maxn];
priority_queue<node>q;
int n,x[maxn],ans[maxn];
char name[maxn][210];
int main()
{
    int i,j,t,m,p;
    scanf("%d", &t);
    while(t--)
    {
        scanf("%d %d %d", &n, &m, &p);
        memset(x,0,sizeof(x));
        for(i=1; i<=n; i++)
        {
            scanf("%s %d", name[i], &a[i].val);
            a[i].id=i;
            ans[i]=0;
        }
        for(i=0; i<m; i++)
        {
            int fx,fy;
            scanf("%d %d", &fx, &fy);
            x[fx]=fy;
        }
        int cou=1;
        for(i=1;i<=n;i++)
        {
            q.push(a[i]);
            for(j=0;j<x[i]&&!q.empty();j++)
            {
                node tt=q.top();
                q.pop();
                ans[cou++]=tt.id;
            }
        }
        while(!q.empty())
        {
            node tt=q.top();
            q.pop();
            ans[cou++]=tt.id;
        }
        int flag=0;
        while(p--)
        {
            int fp;
            scanf("%d",&fp);
            if(!flag)
                printf("%s",name[ans[fp]]);
            else printf(" %s",name[ans[fp]]);
            flag=1;
        }
        printf("\n");
    }
}

 

posted @ 2015-09-16 10:28  sweat123  阅读(128)  评论(0编辑  收藏  举报