这个题目很容易超时,这里要注意一点就不会超时啦。
就是,在加入一个数时,不要用冒泡排序,用插入排序来做,也就是直接一遍遍历找新的那个数的位置。
OK,这个题目蛮简单的,就直接给各位上代码吧。
#include <stdio.h>
#include <math.h>
#define ll __int64;
const int NUM=1e6;
char s[5];
int a;
int ret[NUM];
int main(){
int cnt=0,cnt1=1;//前面那个是黑箱子中有多少个数,后面这个是输出黑箱子中数字的序号
while(scanf("%s",s)!=EOF){
if(s[0]=='A'){
scanf("%d",&a);
//就是一个数字的插入,不要用冒泡排序,太慢了,因为冒泡排序有两重循环
//注意这个是从后往前找位置
int flag=0;
for(int i=cnt;i>=0;i--){
if(a>=ret[i]){
ret[i+1]=a;
flag=1;
break;
}
else ret[i+1]=ret[i];
}
if(!flag) ret[0]=a;
cnt++;//个数要增加一个哦
}
else if(s[0]=='G') printf("%d\n",ret[cnt1++]);
else break;
}
return 0;
}
我们明天再见,继续加油哦!