6.30考试

点名
【题目描述】
在J班的体育课上, 同学们常常会迟到几分钟, 但体育老师的点名却一直很准时。
老师只关心同学的身高, 他会依次询问当前最高的身高, 次高的身高, 第三高的身高,
等等。在询问的过程中,会不时地有人插进队伍里。你需要回答老师每次的询问。
【输入格式】
第一行两个整数 n m,表示先后有 n 个人进队,老师询问了 m 次
第二行 n 个整数,第 i 个数 $A_i$ 表示第 i 个进入队伍的同学的身高为 $A_i$
第三行 m 个整数,第 j 个数 $B_j$ 表示老师在第 $B_j$ 个同学进入队伍后有一次询问
【输出格式】
m 行,每行一个整数,依次表示老师每次询问的答案。数据保证合法
【样例输入】
7 4
9 7 2 8 14 1 8
1 2 6 6
【样例输出】
9
9
7
8
【样例解释】
(9){No.1 = 9}; (9 7){No.2 = 9}; (9 7 2 8 14 1){No.3 = 7; No.4 = 8}
【数据范围】
40%的数据保证 $n \leq 1000$
100%的数据保证 $1 \leq m \leq n ≤ 30000;0 \leq A_i < 2^{32}$

思路分析:STL set 水过,虽然不是100,但是分数还是很可观的。

set是已排序的...然后就像暴力一样插入元素,看是否需要输出即可。

迭代器的用法:同指针的用法,一样支持++,--。

要用long long...要用long long...要用long long...要用long long...要用long long...要用long long...要用long long...要用long long...要用long long...要用long long...要用long long...要用long long...要用long long...要用long long...要用long long...要用long long...要用long long...要用long long...要用long long...要用long long...要用long long...要用long long...要用long long...要用long long...

用multiset...数据有重复,set会爆炸...被卡30分(不读题啊!)

代码:

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<set>
 4 #define maxn 30010
 5 using namespace std;
 6 long long n,m,x,c[maxn],a[maxn],cnt;
 7 set<long long>miku;
 8 set<long long>::iterator hatsune;
 9 int main()
10 {
11 #ifndef LOCAL
12     freopen("rollcall.in","r",stdin);
13     freopen("rollcall.out","w",stdout);
14 #endif
15     scanf("%d%d",&n,&m);
16     for(long long i=1; i<=n; i++)
17         scanf("%d",&a[i]);
18     for(long long i=1; i<=m; i++)
19     {
20         scanf("%d",&x);
21         c[x]++;
22     }
23     miku.clear();//不要啊! 
24     for(long long i=1; i<=n; i++)
25     {
26         miku.insert(a[i]);//插♂入(怎么回事!)... 
27         while(c[i])
28         {
29             c[i]--;
30             hatsune=miku.begin();
31             for(long long j=1; j<=cnt; j++)
32                 hatsune++;
33             cout<<*hatsune<<endl;
34             cnt++;
35         }
36     }
37     return 0;
38 }
View Code

End.

转载于:https://www.cnblogs.com/TheRoadToAu/p/7097726.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值