题目大意:
I表示记下后面的那个数,Q则表示输出当前记下的第k大的数
分析:因为元素允许相同,所以用multiset存储,注意n最大为1e6,直接输出倒数第三个数会WA,正确的做法是删除多余的数
错误代码:
#include
#include
#include
#include
using namespace std;
multiset s;
int main()
{
int n,k,num;
char ch;
while(scanf("%d %d",&n,&k)==2)
{
while(!s.empty()) s.clear();
getchar();
for(int i=0;i>num;
getchar();
s.insert(num);
}
else if(ch=='Q')
{
multiset:: iterator p;
p=s.end();
p--;
p--;
p--;
cout<<*p<
AC代码如下:
#include
#include
#include
#include
using namespace std;
multiset s;
int main()
{
int n,k,num;
char ch;
while(scanf("%d %d",&n,&k)==2)
{
while(!s.empty()) s.clear();
getchar();
for(int i=0;i>num;
getchar();
s.insert(num);
if(s.size()>k) s.erase(s.begin());
}
else if(ch=='Q')
{
multiset:: iterator p;
p=s.begin();
cout<<*p<