2013年11月10日 星期日

[Data Structure] Heap


#include<stdio.h>
#include<string.h>
struct Heap{
    int s[100005],siz;
    int top(){
        return s[1];
    }
    void clear(){
        memset(s,0,sizeof(s));
        siz=0;
    }
    int size(){
        return siz;
    }
    void push(int k){
        int now=++siz,tmp;
        s[now]=k;
        while(now>1){printf("%d.",now);
            if(s[now/2]<s[now])
                tmp=s[now/2],s[now/2]=s[now],s[now]=tmp;
            else break;
            now/=2;
        }
    }
    void pop(){
        int now=1,tmp;
        s[1]=s[siz],s[siz--]=0;
        while(now*2<=siz){
            if(s[now*2]>s[now*2+1] && s[now*2]>s[now])
                tmp=s[now],s[now]=s[now*2],s[now*2]=tmp;
            else if(s[now*2+1]>s[now*2] && s[now*2+1]>s[now])
                tmp=s[now],s[now]=s[now*2+1],s[now*2+1]=tmp;
            else break;
            now*=2;
        }
    }
};
Heap s;
int main(){
    s.clear();
    int t,n;
    while(scanf("%d",&t)!=EOF){
        if(t==1){
            scanf("%d",&n);
            s.push(n);
        }
        if(t==2)
            s.pop();
        if(t==3)
            printf("%d\n",s.top());
        if(t==4)
            printf("%d\n",s.size());
    }
}

沒有留言:

張貼留言