题目描述
有 n(n \le 2 \times 10^6)n(n≤2×106) 名同学陆陆续续进入教室。我们知道每名同学的学号(在 1 到 10^9109 之间),按进教室的顺序给出。上课了,老师想知道第 ii 个进入教室的同学的学号是什么(最先进入教室的同学 i=1i=1),询问次数不超过 10^5105 次。
输入格式
第一行 2 个整数 n 和 m,表示学生个数和询问次数。
第二行 n 个整数,表示按顺序进入教室的学号。
第三行 m 个整数,表示询问第几个进入教室的同学。
输出格式
m 个整数表示答案,用换行隔开。
输入输出样例
输入 #1复制
10 3 1 9 2 60 8 17 11 4 5 14 1 5 9
输出 #1复制
1 8 5
代码如下:
#include<iostream>
using namespace std;
#define MAXSIZE 10000000
#define OVERFLOW -2
#define OK 1
#define ERROR 0
typedef int Status;
typedef struct
{ char Number[8];
}Student;
typedef struct
{ Student *elem;
int length;
}SqList;
Status InitList(SqList &L)
{ L.elem=new Student[MAXSIZE];
if(!L.elem)
{ return OVERFLOW;
}
L.length=0;
return OK;
}
Status CreatList(SqList &L,int n)
{ int i;
for(i=1;i<=n;i++)
{ cin>>L.elem[i].Number;
}
L.length=n;
return OK;
}
int main()
{ SqList L;
int n,m,a;
cin>>n>>m;
InitList(L);
CreatList(L,n);
while(m--)
{ cin>>a;
cout<<L.elem[a].Number<<endl;
}
return 0;
}