2015长春网络赛1001,简单优先队列的题,由于许多细节问题,比赛的时候没能ac,心情不好,心情不好,代码也写的乱
#include<iostream>
#include<algorithm>
#include<queue>
#include<cstring>
#define maxn 200000
using namespace std;
int n,m,k;
struct stu
{
string name;
int v;
int id;
friend bool operator<(stu x,stu y)
{
if(x.v==y.v) return x.id>y.id;
return x.v<y.v;
}
};
struct stu1
{
int x;
int y;
};
stu1 f[maxn];
bool cmp(stu1 x,stu1 y)
{
return x.x<y.x;
}
stu mapp[maxn];
string ans[maxn];
int que[maxn];
void solve()
{
cin>>n>>m>>k;
queue<stu>q;
priority_queue<stu>qq;
for(int i=0;i<n;i++)
{
cin>>mapp[i].name>>mapp[i].v;
mapp[i].id=i;
q.push(mapp[i]);
}
int d=0,s=0;
for(int i=0;i<m;i++)
{
cin>>f[i].x>>f[i].y;
}
sort(f,f+m,cmp);
for(int i=0;i<m;i++)
{
int x=f[i].x;
int y=f[i].y;
for(int i=0;i<x-d;i++)
{
if(!q.size()) break;
qq.push(q.front());
q.pop();
}
for(int i=0;i<y;i++)
{
if(!qq.size()) break;
ans[s++]=qq.top().name;
qq.pop();
}
d=x;
}
while(q.size())
{
qq.push(q.front());
q.pop();
}
while(qq.size())
{
ans[s++]=qq.top().name;
qq.pop();
}
for(int i=0;i<k;i++) cin>>que[i];
cout<<ans[que[0]-1];
for(int i=1;i<k;i++)
{
cout<<" "<<ans[que[i]-1];
}
cout<<endl;
}
int main()
{
cin.sync_with_stdio(false);
int t;
cin>>t;
while(t--)
{
solve();
}
return 0;
}