nyoj 1073 最小值
最小值
时间限制:1000 ms | 内存限制:65535 KB
难度:3
- 描述
-
输入N个数,M次查询。
每次查询给出一个数x。
要求:每次查询输出前x个数中第i小的数。(i为第i次查询)
你可以假设M <= N,Xi <= Xi+1 <= Xi+2 <= ……. <= Xm (Xm <= N).
- 输入
- Line0:T
Line1: N,M
Line2…LineN+1:num1,......,numN
LineN+2…LineN+2+M:x1,……,xM
N < 30000, num < 2000000000
- 输出
- 每次查询输出前i小的数,单独一行。
详细格式请参考样例。 - 样例输入
-
1 7 4 3 1 -4 2 8 -1000 2 1 2 6 6
- 样例输出
-
3 3 1 2
/** 分析:该题是,将前m个数升序排序,再输出 P[pos]的值 注意:不要将原数组直接进行排序 **/
C/C++代码实现:
#include <iostream> #include <algorithm> #include <cstring> #include <cmath> #include <cstdio> #include <stack> #include <queue> #include <map> using namespace std; int A[30005], B[30005]; int main () { int T; scanf ("%d", &T); while (T --) { int N, M, a; scanf ("%d%d", &N, &M); for (int i = 0; i < N; ++ i) scanf ("%d", &A[i]); for (int i = 1; i <= M; ++ i) { scanf ("%d", &a); for (int j = 0; j < a; ++ j) { B[j] = A[j]; } sort (B, B + a, less <int>()); printf ("%d\n", B[i - 1]); } } return 0; }