首页 > 代码库 > 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 }
6.30考试