迷之CE,本地无误

P1168 中位数

福明o7 @ 2022-03-16 12:18:12

代码:

#include<bits/stdc++.h>
#define resh_umbrella return 0 
using namespace std;
int n;
int x;//一个临时读入数据的变量 
priority_queue<int> q1;//大根堆 
priority_queue<int,vector<int>,greater<int> >q2;//小根堆 
int main(){
    scanf("%d",&n);
    scanf("%d",&x);
    printf("%d\n",x);//第一个数据的特判
    q1.push(x);
    for(int i=2;i<=n;i++){//开始遍历 
        scanf("%d",&x);
        if(x>q1.top()){//如果该数据大于大根堆的顶部(即读入了当前的最大值) 
            q2.push(x);//用小根底保留(修复) 
        }
        else{
            q1.push(x);
        }
        while(abs(q1.size()-q2.size())>1){//当两边堆大小基本不对等时(差距大于1时) 
            //进行平衡操作
            if(q1.size()>q2.size()){
                q2.push(q1.top());
                q1.pop();
            } 
            else{
                q1.push(q2.top());
                q2.pop();               
            }
        }
        if(i%2==1){//奇数位输出,偶数位不输出 
            if(q1.size()>q2.size()){
                printf("%d\n",q1.top());
            }
            else{
                printf("%d\n",q2.top());
            }
        }
    }
    resh_umbrella;
}

abs(q1.size()-q2.size())>1这行编译错误,说有歧义? 本地编辑器DEV-C++5.11 运行无误


by Wuzhijing @ 2022-03-16 12:40:48

C++的abs函数存在两种版本:在stdlib.h中的和在cmath中的。


by 福明o7 @ 2022-03-16 18:43:05

本贴已完结,问题已解决(强制转换Int即可)


by xuekaiwen_emmm @ 2023-01-02 21:26:45

懂了

问题出在size返回unsigned没有负数(大概)不能用abs这个求绝对值


|