POJ3481(待完善版本,请看注释)

#include <iostream>
using namespace std;

//根据需求调整大小
#define SIZE 10

typedef struct Node{
    int K;
    int P;
}Node;
Node big[SIZE];
Node small[SIZE];
int big_size=1;
int small_size=1;

void swap(Node x, Node y) {
    Node tmp;
    tmp.K = x.K;
    tmp.P = x.P;
    x.K = y.K;
    x.P = y.P;
    y.K = tmp.K;
    y.P = tmp.P;
}
void big_fixDown(Node heap[], int pos, int size){

    int x = pos;
    if(x > size) return;//exit

    // 选出最大的
    int l = 2 * x;
    int r = l + 1;
    int maxPos = x;
    if(l <= size && heap[maxPos].P < heap[l].P) maxPos = l;
    if(r <= size && heap[maxPos].P < heap[r].P) maxPos = r;

    if(maxPos != x){ //如果父节点不是最大的,进行互换,并在新的点上继续fixDown
        swap(heap[x], heap[maxPos]);
        big_fixDown(heap, maxPos, size);
    }
}
void small_fixDown(Node heap[], int pos, int size){

    int x = pos;
    if(x > size) return;//exit

    // 选出最大的
    int l = 2 * x;
    int r = l + 1;
    int maxPos = x;
    if(l <= size && heap[maxPos].P > heap[l].P) maxPos = l;
    if(r <= size && heap[maxPos].P > heap[r].P) maxPos = r;

    if(maxPos != x){ //如果父节点不是最大的,进行互换,并在新的点上继续fixDown
        swap(heap[x], heap[maxPos]);
        big_fixDown(heap, maxPos, size);
    }
}

void big_fixUp(Node heap[], int pos){
    int x = pos;
    int p;
    while(x > 1){
        p = x/2;
        if(heap[x].P > heap[p].P){
            swap(heap[x], heap[p]);
            x = p;
        }else return;
    }
}
void small_fixUp(Node heap[], int pos){
    int x = pos;
    int p;
    while(x > 1){
        p = x/2;
        if(heap[x].P < heap[p].P){
            swap(heap[x], heap[p]);
            x = p;
        }else return;
    }
}
void buildHeap(int heap[], int size){
    for(int i = size/2; i >= 1; i--){
        big_fixDown(heap, i, size);
    }
}

//heapSort前要先build heap
void heapSort(int heap[], int size){
    int oriSize = size;
    for(int i = 0; i < oriSize - 1; i++){ //注意不要把oriSize和size混在一起
        //互换堆顶和最后一个元素,将堆顶元素放在数组最后面
        swap(heap[size], heap[1]);
        size--;
        fixDown(heap, 1, size);
    }
}
void insert(){
    //构建大根堆和小根堆
    big_fixUp(big,big_size);
    small_fixUp(small,small_size);
}
int big_pop(){
    //函数里面还没有加pop大根堆对于小跟堆的影响

    int ret = 0;
    ret = big[1].K;
    big[1] = big[big_size-1];
    big[big_size-1].P = 0;

    //down
    big_fixDown(big,1,big_size);
    return ret;
}

void small_pop(){

    //函数里面还没有加pop小根堆对于大跟堆的影响
    int ret = 0;
    ret = small[1].K;
    small[1] = small[big_size-1];
    small[big_size-1].P = 0;

    small_fixDown(small,1,small_size);
    return ret;
}
int main(){
   freopen("input.txt","r",stdin);
   int cmd;
   int k,p;
   while(scanf("%d",cmd)&&cmd!=0){
       switch(cmd){
       case    1:
           scanf("%d %d",&k,&p);
           big[big_size].K = k;
           big[big_size++].P = p;//指向要放入的位置
           small[small_size].K = k;
           small[small_size++].P = p;
           insert();
           break;
       case 2:
           break;
       case 3:
           break;

       }

   }
    return 0;
}
时间: 2024-11-03 21:17:19

POJ3481(待完善版本,请看注释)的相关文章

[转载]如果是初学C语言请看完一些成功人士的心得

如果是初学C语言请看完一些成功人士的心得 转自程先的专栏     今天,我能够自称是一个混IT的人,并能以此谋生,将来大家能一次谋生,都要感谢两个人:克劳德.香农和约翰.冯.诺依曼,是他们发现了所有的数字化信息,不论是一段程序,一封email,一部电影都是用一连串的1和0进行编码的:是他们发现了我们可以利用一个预先编写好的程序控制机器,并使之完成我们期望它完成的动作.建议大家在心里默念三遍他们的名字,以示仰慕.当然,如果让你们带着现在的知识回到他们的那个时代,那么就没有什么图灵奖了. C语言程序

&lt;转&gt;如果你报createSQLQuery is not valid without active transaction,请看这里

很多时候我们使用hibernate的session时,都是让session在 某一运行环境中保持其唯一.例如在同一线程内用同一个session,在同一方法内用同一session,这样我们就可以用session里面缓存好的数 据.但,我想说的不是缓存,且听我一一道来.         最近试用spring3.0.2+struts2.18+hibernate3.3.2学习搭建一个web项目,出现了一个相当郁闷的问题.就是我明明配置好了spring管理hibernate事务了,当 我在dao中执行hi

设计模式--请看清本质

设计模式,一个非常容易让人觉得高大上的东西. 其实,它也确实不错,只是,就看你能不能了解到他的本质. 你只需要一把新手剑和一件布衫,利用自己熟练的技法与走位,就足够打败无数的对手了 设计模式是什么,百度上如此解释,我不多赘述 但让我来说,设计模式,是一种解决问题的思维,而并非某种特定的方法 这两者差不多? 特定的方法,更容易让人走进一种"刻意的效仿"的怪圈,进一步变成了定向思维,没办法举一反三 而解决问题的思维,这是完全属于你自己的,由你的内心产生的思维方式,最终达到兵来将挡,水来土掩

使用maven编译的时候提示 maven-source 1.3 中不支持注释请使用 -source 5 或更高版本以启用注释的错误。

在编译的模块的pom文件中加上 <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.6</source> <target>1.6</ta

maven-source 1.3 中不支持注释请使用 -source 5 或更高版本以启用注释

解决办法:在pom里 加上以下代码 <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.5</source> <target>1.5</

如果是初学C语言请看完 一些成功人士的心得

转自程先的专栏     今天,我能够自称是一个混IT的人,并能以此谋生,将来大家能一次谋生,都要感谢两个人:克劳德.香农和约翰.冯.诺依曼,是他们发现了所有的数字化信息,不论是一段程序,一封email,一部电影都是用一连串的1和0进行编码的:是他们发现了我们可以利用一个预先编写好的程序控制机器,并使之完成我们期望它完成的动作.建议大家在心里默念三遍他们的名字,以示仰慕.当然,如果让你们带着现在的知识回到他们的那个时代,那么就没有什么图灵奖了. C语言程序设计是我们的专业基础课,但是C语言本身却是

IE版本判断条件注释

IE下判断IE版本的语句...[if lte IE 8]--[endif] <!--[if lte IE 6]> <![endif]--> IE6及其以下版本可见   <!--[if lte IE 7]> <![endif]--> IE7及其以下版本可见   <!--[if IE 6]> <![endif]--> 只有IE6版本可见   <![if !IE]> <![endif]> 除了IE以外的版本   &l

如果不快乐,请看下。

(原题:如果不快乐,请自杀) 我想当有人看到这个题目或许觉得这个很无厘头或者消极.其实看懂的人我想受益匪浅,看不懂的人或许可以当作一般的鸡汤问看. 不过我的主题还是题目的意思. 我认为人是公平的,因为命只有一条.不管中间遇到什么,你死了便是死了.而且,我认为人就是动物.其实没有我们看的那么重要,所以我觉得长生或者换一个躯壳的研究根本就是再制造一个动物而已.假如有个生物凌驾与我们之上,我想我们或许能够看清我们的真正的价值.我们之所以这么执着正是因为我们之上好像没有什么生物可以压迫我们,主宰我们.所

centos7编译安装PHP7已经把你逼到去安定医院看门诊的地步?请看此文

本文援引自https://www.cnblogs.com/lamp01/p/10101659.html,亲测可行,特此鸣谢 地球上总有一群人是如此深爱PHP,但无奈的是编译安装的过程化特性,导致各种bitch依赖陆续跳出来要求被安装,在configure和make过程中各种花式搅局不说,各种火星错误原因提示更是叫人欲哭无泪,更火大的是,你花了一礼拜搞定之后,突然良心发现想安装nginx支持组件php-fpm,只见一行隽绣的小字写着 “请在configure时--enable-fpm”,顿时就有按