手写堆挂了~,1个点WA,3个点RE

P1168 中位数

阿哲朗读 @ 2022-01-25 14:01:42

#include<bits/stdc++.h>
using namespace std;
int b[50001],s[50001],lens,lenb;    //b[]大顶堆,s[]小顶堆
void addb(int t)
{
    int q;
    b[++lenb]=t;
    q=lenb;
    while(q>1)
    {
        if(b[q]>b[q/2]) 
        {
            swap(b[q],b[q/2]);
            q/=2;
        }
        else break;
    }
}
void adds(int t)
{
    int q;
    s[++lens]=t;
    q=lens;
    while(q>1)
    {
        if(s[q]<s[q/2]) 
        {
            swap(s[q],s[q/2]);
            q/=2;
        }
        else break;
    }
}
void db()           //删堆顶
{
    if(lenb==0) return;
    b[1]=b[lenb--];
    int p=1;
    while(1)
    {
        int maxp=p;
        if(b[2*p]>b[maxp]&&2*p<=lenb) maxp=2*p;
        if(b[2*p+1]>b[maxp]&&2*p+1<=lenb) maxp++;
        if(p==maxp) break;
        swap(b[maxp],b[p]);
        p=maxp;
    }
}
void ds()       //删堆顶
{
    if(lens==0) return;
    s[1]=s[lens--];
    int p=1;
    while(1)
    {
        int minp=p;
        if(s[2*p]<s[minp]&&2*p<=lens) minp=2*p;
        if(s[2*p+1]<s[minp]&&2*p+1<=lens) minp++;
        if(p==minp) break;
        swap(s[minp],s[p]);
        p=minp;
    }
}
int main()
{
    int n,t1,t2;
    cin>>n>>t1;
    cout<<t1<<endl;
    b[1]=t1;
    lenb=1;
    for(int i=1;i<n-1;i+=2)
    {   
        cin>>t1>>t2;
        if(t1<=b[1]) addb(t1);
        else adds(t1);
        if(t2<=b[1]) addb(t2);
        else adds(t2);
        if(lens>lenb+1)
        {
            int x=s[1];
            ds();
            addb(x);
        }
        if(lens<lenb-1)
        {
            int x=b[1];
            db();
            adds(x);
        }
        if(lenb>lens) cout<<b[1]<<endl;
        else cout<<s[1]<<endl;
    }
    return 0;
 } 

by qwq___qaq @ 2022-01-25 14:02:24

@阿哲朗读 n\le 10^5


by 阿哲朗读 @ 2022-01-25 14:15:51

@_sto_pengzijunorz 还有一个点WA了


by wbw。 @ 2022-01-25 23:20:55

@阿哲朗读

50001改成500002

而且if(b[2*p]>b[maxp]&&2*p<=lenb)在某些时候不保险。建议写成if(2*p<=lenb&&b[2*p]>b[maxp])。&&是短路运算符


by wbw。 @ 2022-01-26 00:07:52

草了,当我没说。

我怎么知道一共就五个点。


by 阿哲朗读 @ 2022-01-26 10:36:43

@wbw。 大佬nb


by wbw。 @ 2022-01-26 10:38:35

@阿哲朗读 不不不您强所以你不得不自己调题了。


by 阿哲朗读 @ 2022-01-26 10:40:32

@wbw。 氧化钙了! 4个点WA了


|