问个关于STL的问题

P1168 中位数

JimmyFlower @ 2020-09-09 19:20:48

这个在洛谷是可以A的,但是在本地输出就这样:

1
3
5
//然后光标一直在这闪,按回车也没东西,那个6一直出不来。

求解答,代码如下:

#include<queue>
#include<vector>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define ri register int
using namespace std;
int T,num,n,x,y,cnt;
priority_queue<int> q1;
priority_queue<int,vector<int>,greater<int> > q2;
int main()
{
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {
        scanf("%d ",&x);
        if(q2.empty()) q2.push(x);
        else
        {
            if(x<=q2.top()) q1.push(x);
            else q2.push(x);
            while(q2.size()<q1.size())
            {
                q2.push(q1.top());
                q1.pop();
            }
            while(q2.size()>q1.size()+1)
            {
                q1.push(q2.top());
                q2.pop();
            }
        }
        if(i&1) printf("%d\n",q2.top());
    }
    return 0;
}

by JimmyFlower @ 2020-09-09 19:22:11

噢对了,本人刚学STL,感觉问题在这方面?


by dо_while_true @ 2020-09-09 19:40:30

@JimmyFlower scanf的问题


by Link_Space @ 2020-09-09 19:41:44

按一下ctrl+z就好了


by dо_while_true @ 2020-09-09 19:41:50

样例行末无空格,数据点行末应该是有空格的。

你的 scanf 里面 %d 后面有个空格,只有读到空格才视为读完一个数


by Link_Space @ 2020-09-09 19:42:21

或者把循环里面的那个scanf的%d后面的空格去掉


by dо_while_true @ 2020-09-09 19:43:38

@dо_while_true 也有可能不是数据点行末有空格,是数据点文末有 EOF ,会自动识别读完最后一个数,但是你本地测的时候粘贴进去并没有 EOF


by JimmyFlower @ 2020-09-09 19:43:51

啊啊啊没看到谢谢


by xuekaiwen_emmm @ 2023-01-02 21:42:41

这个帖子告诉我们:写代码要有好习惯,写完了也要里里外外检查一遍,防止某些很【哔~】的问题出现自己没找到发帖问人结果一群大佬闲的没事干发现了你的帖子看了一眼找出那很【哔~】的问题然后发出来,当场社死


|