竟然编译错了,求大佬解答

P1168 中位数

xQAQyn @ 2019-04-26 20:28:06

#include<bits/stdc++.h>
using namespace std;

priority_queue<int> a;
priority_queue<int,vector<int>,greater<int> > b;

int main()
{
    int n;
    int kkk;
    scanf("%d%d",&n,&kkk);
    a.push(kkk);
    cout<<kkk;
    for(int i = 1;i < n;i++)
    {
        scanf("%d",&kkk);
        if(kkk > a.top())
            b.push(kkk);
        else a.push(kkk);
        if(i % 2 == 0)
        {
            while(abs(a.size() - b.size())>1)
            {
                if(a.size()>b.size())
                {
                    b.push(a.top());
                    a.pop(); 
                }
                else
                {
                    a.push(b.top());
                    b.pop();
                }
            }
            if(a.size() > b.size())
                cout<<endl<<a.top();
            else
                cout<<endl<<b.top();
        }
    }
    return 0;
}

by _Misaka_Mikoto @ 2019-04-26 20:34:09

https://www.luogu.org/recordnew/show/18554418

查了你的编译记录 是因为头文件导致的abs歧义

你自己定义一个abs 名字改成ccf_abs之类的 不重复


by _Misaka_Mikoto @ 2019-04-26 20:34:48

我只是很好奇你是不看编译错误还是看不懂?不应该啊


by 0AND1STORY @ 2019-04-26 21:01:22

强制转换一下类型应该就行了,编译错误里写的找不到abs函数的priority_queue<int>::size_type类型的函数重载,把a.size() - b.size()改成int(a.size()-b.size())应该就行了


by xQAQyn @ 2019-04-27 12:37:49

@Xeon 是真没看懂为什么错了,因为我自己看到题解第一篇大佬写得和我差不多[捂脸]。。。。。


by xQAQyn @ 2019-04-27 12:45:06

我自己在本地跑一点问题都没有


|