首页 > 代码库 > 6.30考试

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...

代码:

技术分享
 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>s; 8 set<long long>::iterator p; 9 int main()10 {11     #ifndef LOCAL12         freopen("rollcall.in","r",stdin);13         freopen("rollcall.out","w",stdout);14     #endif15     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     s.clear();24     for(long long i=1;i<=n;i++)25     {26         s.insert(a[i]);27         while(c[i])28         {29             c[i]--;30             p=s.begin();31             for(long long j=1;j<=cnt;j++)32                 p++;33             cout<<*p<<endl;34             cnt++;35         }36     }37     return 0;38 }
View Code

6.30考试