长春网络赛 1101

Alisha’s Party

Time Limit: 3000/2000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)
Total Submission(s): 4409    Accepted Submission(s): 576

Problem Description

Princess Alisha invites her friends to come to her birthday party. Each of her friends will bring a gift of some value v, and all of them will come at a different time. Because the lobby is not large enough, Alisha can only let a few people in at a time. She decides to let the person whose gift has the highest value enter first.

Each time when Alisha opens the door, she can decide to let p people enter her castle. If there are less than p people in the lobby, then all of them would enter. And after all of her friends has arrived, Alisha will open the door again and this time every friend who has not entered yet would enter.

If there are two friends who bring gifts of the same value, then the one who comes first should enter first. Given a query n Please tell Alisha who the n−th person to enter her castle is.

Input

The first line of the input gives the number of test cases, T , where 1≤T≤15.

In each test case, the first line contains three numbers k,m and q separated by blanks. k is the number of her friends invited where 1≤k≤150,000. The door would open m times before all Alisha’s friends arrive where 0≤m≤k. Alisha will have q queries where 1≤q≤100.

The i−th of the following k lines gives a string Bi, which consists of no more than 200 English characters, and an integer vi, 1≤vi≤108, separated by a blank. Bi is the name of the i−th person coming to Alisha’s party and Bi brings a gift of value vi.

Each of the following m lines contains two integers t(1≤t≤k) and p(0≤p≤k) separated by a blank. The door will open right after the t−th person arrives, and Alisha will let p friends enter her castle.

The last line of each test case will contain q numbers n1,...,nq separated by a space, which means Alisha wants to know who are the n1−th,...,nq−th friends to enter her castle.

Note: there will be at most two test cases containing n>10000.

Output

For each test case, output the corresponding name of Alisha’s query, separated by a space.

Sample Input

1
5 2 3
Sorey 3
Rose 3
Maltran 3
Lailah 5
Mikleo 6
1 1
4 2
1 2 3

Sample Output

Sorey Lailah Rose

优先队列

 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 }

时间: 2025-01-04 11:31:40

长春网络赛 1101的相关文章

hdu4271 Find Black Hand 2012长春网络赛E题 最短编辑距离

hdu4271 Find Black Hand  2012长春网络赛E题  最短编辑距离 Find Black Hand Time Limit : 5000/2000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) Total Submission(s) : 19   Accepted Submission(s) : 1 Problem Description I like playing game with my friend

2015长春网络赛总结

早上七点多就(冻)醒来了,训练了一个暑假,acm生涯的第一场网络赛,很激动. 九点开打,我拔不出网线,用的机房电脑,装的cb有问题,不能编译,只好用dev.男神电脑插上网线没有网,习惯了linux可能不习惯吧.这提醒我们以后一定要早点去把环境调好. 第三分钟,G题有人A了.我跟560开始看题,男神还在弄电脑.题意是给你n个数(n<1000),然后q(q<1000)次询问,要求你输出[l,r]区间的最大值.数据很小,我说暴力,然后560说线段树,然后模板13分钟1Y.然后560开始搞J,一个貌似

hdu 5441 (2015长春网络赛E题 带权并查集 )

n个结点,m条边,权值是 从u到v所花的时间 ,每次询问会给一个时间,权值比 询问值小的边就可以走 从u到v 和从v到u算不同的两次 输出有多少种不同的走法(大概是这个意思吧)先把边的权值 从小到大排序 询问值也按从小到大排序num记录集合里元素的个数每合并两个集合 ans增加 2*num[u]*num[v] Sample Input15 5 3 //n w q2 3 63341 5 157243 5 57054 3 123821 3 2172660001000013000 Sample Out

长春网络赛 1102

Ponds Time Limit: 1500/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total Submission(s): 3851    Accepted Submission(s): 582 Problem Description Betty owns a lot of ponds, some of them are connected with other ponds by pipes, a

hdu 5438 Ponds(长春网络赛 拓扑+bfs)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5438 Ponds Time Limit: 1500/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total Submission(s): 2237    Accepted Submission(s): 707 Problem Description Betty owns a lot of ponds, som

hdu 5446(2015长春网络赛J题 Lucas定理+中国剩余定理)

题意:M=p1*p2*...pk:求C(n,m)%M,pi小于10^5,n,m,M都是小于10^18. pi为质数 M不一定是质数 所以只能用Lucas定理求k次 C(n,m)%Pi最后会得到一个同余方程组x≡B[0](mod p[0])x≡B[1](mod p[1])x≡B[2](mod p[2])......解这个同余方程组 用中国剩余定理 Sample Input19 5 23 5 Sample Output6 1 # include <iostream> 2 # include <

长春网络赛 1108

Elven Postman Time Limit: 1500/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total Submission(s): 1108    Accepted Submission(s): 587 Problem Description Elves are very peculiar creatures. As we all know, they can live for a ver

2015长春网络赛题解

A.http://acm.hdu.edu.cn/showproblem.php?pid=5437 思路:维护一个优先队列,模拟开门,枚举每一个人,同时记录当先开门的位置,如果人数等于开门位置,就从队列中取出min(size(),q),放到我们的答案队列中.注意开门时间可能相同,所以要先排序,再加一个循环.还有最后一次开门,剩下的人都放进来.注意他说的只有两次ni会超过10000,所以我们可以在输入时记下查询的最大位置.当答案队列中的人大于查询的最大位置就可以退出循环了,这样就不会超时了.因为代码

Hdu 5439 Aggregated Counting (2015长春网络赛 ACM/ICPC Asia Regional Changchun Online 找规律)

题目链接: Hdu 5439 Aggregated Counting 题目描述: 刚开始给一个1,序列a是由a[i]个i组成,最后1就变成了1,2,2,3,3,4,4,4,5,5,5.......,最后问a[i]==n(i最大)时候,i最后一次出现的下标是多少? 解题思路: 问题可以转化为求a[i] == n (i最大),数列前i项的和为多少. index: 1 2 3 4 5 6 7 8 9 10 a:        1 2 2 3 3 4 4 4 5 5 可以观察出:ans[1] = 1,