标签:
Time Limit: 3000/2000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)
Total Submission(s): 4409 Accepted Submission(s): 576
1 #include <stdio.h> 2 #include <string.h> 3 #include <queue> 4 #include <algorithm> 5 using namespace std; 6 7 struct friends 8 { 9 char a[205]; 10 int v,id; 11 bool operator < (const friends &a) const 12 { 13 if(v==a.v) 14 return id>a.id; 15 else 16 return v<a.v; 17 } 18 }; 19 20 struct mo 21 { 22 int x; 23 int y; 24 }; 25 26 bool cmp(mo A,mo B) 27 { 28 return A.x<B.x; 29 } 30 31 friends s[150005]; 32 mo b[150005]; 33 int num[150005],question[105]; 34 35 int main() 36 { 37 int T; 38 int k,m,q; 39 int i,j,l; 40 scanf("%d",&T); 41 while(T--) 42 { 43 scanf("%d %d %d",&k,&m,&q); 44 for(i=1;i<=k;i++) 45 { 46 scanf("%s%d",&s[i].a,&s[i].v); 47 s[i].id=i; 48 } 49 priority_queue<friends> que; 50 for(i=1;i<=m;i++) 51 { 52 scanf("%d %d",&b[i].x,&b[i].y); 53 } 54 for(i=1;i<=q;i++) 55 { 56 scanf("%d",&question[i]); 57 } 58 59 sort(b+1,b+m+1,cmp); 60 l=1;int mm=0; 61 for(i=1;i<=m;i++) 62 { 63 for(j=l;j<=b[i].x;j++) 64 { 65 que.push(s[j]); 66 } 67 l=j; 68 while(b[i].y && !que.empty()) 69 { 70 friends cur=que.top(); 71 que.pop();b[i].y--; 72 num[++mm]=cur.id; 73 } 74 } 75 for(i=l;i<=k;i++) 76 { 77 que.push(s[i]); 78 } 79 while(!que.empty()) 80 { 81 friends cur=que.top(); 82 que.pop(); 83 num[++mm]=cur.id; 84 } 85 86 for(i=1;i<q;i++) 87 { 88 printf("%s ",s[num[question[i]]].a); 89 } 90 printf("%s\n",s[num[question[q]]].a); 91 } 92 return 0; 93 }
标签:
原文地址:http://www.cnblogs.com/cyd308/p/4820253.html