标签:
1 #include<cstdio> 2 #include<cstring> 3 #include<queue> 4 #include<algorithm> 5 6 #define pb push_back 7 8 using namespace std; 9 10 const int maxn=150000+5; 11 12 struct Node 13 { 14 int v,id; 15 bool operator <(const Node&x)const 16 { 17 if(x.v==v) 18 return x.id<id; 19 return v<x.v; 20 } 21 }; 22 struct Time 23 { 24 int tim,num; 25 }; 26 Time time[maxn]; 27 char name[maxn][205]; 28 Node ord[maxn]; 29 int ans[maxn]; 30 31 bool cmp(Time x,Time y) 32 { 33 return x.tim<y.tim; 34 } 35 36 priority_queue<Node>que; 37 38 int main() 39 { 40 int test; 41 scanf("%d",&test); 42 while(test--){ 43 int n,m,q; 44 scanf("%d %d %d",&n,&m,&q); 45 for(int i=0;i<n;i++){ 46 scanf("%s %d",&name[i],&ord[i].v); 47 ord[i].id=i; 48 } 49 50 for(int i=0;i<m;i++){ 51 scanf("%d %d",&time[i].tim,&time[i].num); 52 } 53 54 sort(time,time+m,cmp); 55 56 while(!que.empty()) 57 que.pop(); 58 59 int now=0,len=0; 60 for(int j=0;j<m;j++){ 61 while(now<time[j].tim){ 62 que.push(ord[now]); 63 now++; 64 } 65 while(time[j].num--){ 66 ans[len++]=que.top().id; 67 que.pop(); 68 if(que.empty()) 69 break; 70 } 71 } 72 while(now<n){ 73 que.push(ord[now++]); 74 } 75 while(!que.empty()){ 76 ans[len++]=que.top().id; 77 que.pop(); 78 } 79 int c; 80 for(int i=0;i<q-1;i++){ 81 scanf("%d",&c); 82 printf("%s ",name[ans[c-1]]); 83 } 84 scanf("%d",&c); 85 printf("%s\n",name[ans[c-1]]); 86 } 87 return 0; 88 }
hdu 5437 Alisha’s Party 模拟 优先队列
标签:
原文地址:http://www.cnblogs.com/-maybe/p/4805493.html