NBUT 1535

时间:2021-09-04 00:22:54

题意:往一个塔里放数,取数,找第 k 个大的数

刚开始用 stack 做的,不知道怎样找第 k 个数

又想到用 vector ,以前用过

注释有点多吧  ......

代码如下:

#include<stdio.h>
#include<vector> //定义 c++ 中的容器所需的头文件
#include<algorithm> //sort 排序所需的头文件
using namespace std; //c++ 要用到
vector<int> qq1, qq2; //定义容器 qq1,qq2,相当于数组,比数组功能大点
int main()
{
int t, n, k;
scanf("%d", &t);
while(t--)
{
qq1.clear(); //由于多组数据,每次都将 qq1 清空
scanf("%d%d", &n, &k);
char ch[];
while(n--)
{
int a;
scanf("%s", ch);
if(ch[] == 'P')
{
scanf("%d", &a);
qq1.push_back(a); //将 a 放到容器 qq1 最后面
}
else if(ch[] == 'T')
{
int len = qq1.size(); //容器 qq1 中元素个数
printf("%d\n", qq1[len - ]); //输出 qq1 中最后面的元素,注意下标:len - 1,从 qq1[0] 开始
qq1.pop_back(); //将 qq1 最后的元素舍弃
}
else
{
int len = qq1.size();
qq2 = qq1; //将 qq1 复制到 qq2,避免影响 qq1
sort(qq2.begin(), qq2.end()); //将 qq2 从小到大排序
if(len >= k) //若元素个数大于 k ,输出第 k 个数
printf("%d\n", qq2[k - ]);
else printf("%d\n", qq2[len - ]); //否则,输出最大的数
}
}
}
return ;
}