#include <iostream>
#include <stdio.h>
#include <string.h>
#include <algorithm> using namespace std;
const int maxn=+;
int heap_size=; //堆的元素个数
struct Node{
char name[];
int para,pri;
int t; //用于存储信息加入的顺序,当优先级相同时,t小的先出队列
}node[maxn]; //交换node[a]和node[b]的值
void exchange(int a,int b){
Node tmp;
tmp=node[a];
node[a]=node[b];
node[b]=tmp;
}
//比较node[a]和node[b],若a小于,则返回-1。
int compare(int a,int b){
if(node[a].pri<node[b].pri)
return -;
if(node[a].pri>node[b].pri)
return ;
if(node[a].t<node[b].t)
return -;
if(node[a].t>node[b].t)
return ;
return ;
}
//维护堆,使堆保持最小堆的性质
void heap_update(int i){
int small;
int l=*i;
int r=*i+;
if(l<=heap_size && compare(l,i)<)
small=l;
else
small=i;
if(r<=heap_size && compare(r,small)<)
small=r;
if(small!=i){
exchange(i,small);
heap_update(small);
}
}
//加入一个新元素
void heap_insert(char str[],int para,int pri){
heap_size++;
strcpy(node[heap_size].name,str);
node[heap_size].para=para;
node[heap_size].pri=pri;
node[heap_size].t=heap_size;
int t=heap_size;
while(t> && node[t/].pri>node[t].pri){
exchange(t/,t);
t=t>>;
}
}
//将堆顶元素出队列
Node heap_pop(){
Node tmp=node[];
node[]=node[heap_size];
heap_size--;
heap_update();
return tmp;
}
int main()
{
char str[],s[];
Node tmp;
int para,pri;
while(scanf("%s",str)!=EOF){
if(str[]=='G'){
if(heap_size==){
printf("EMPTY QUEUE!\n");
}
else{
tmp=heap_pop();
printf("%s %d\n",tmp.name,tmp.para);
}
}
else{
scanf("%s%d%d",s,&para,&pri);
heap_insert(s,para,pri);
}
}
return ;
}

ZOJ 2724 Windows Message Queue (优先级队列,水题,自己动手写了个最小堆)的更多相关文章

  1. zoj 2724 Windows Message Queue

    Windows Message Queue Time Limit: 2 Seconds      Memory Limit: 65536 KB Message queue is the basic f ...

  2. zoj 2724 Windows Message Queue(使用priority_queue容器模拟消息队列)

    题目链接: http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2724 题目描述: Message queue is the b ...

  3. ACM解题之(ZOJ 2724)Windows Message Queue

    题目来源: 点击打开链接 题目翻译: 消息队列是windows系统的基本基础.对于每个进程,系统都维护一个消息队列.如果这个过程发生某些事情,例如鼠标点击,文本改变,系统会向队列添加一条消息.同时,如 ...

  4. ZOJ 2724 Windows Message Queue (二叉堆,优先队列)

    思路:用优先队列 priority_queue,简单 两种方式改变队列 的优先级 (默认的是从大到小) #include<iostream> #include<queue> # ...

  5. zoj 2724 Windows Message Queue 优先队列

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1724 题目大意: 给出两种操作,GET要求取出当前队首的元素,而PUT会输入名 ...

  6. uva 12100 Printer Queue 优先级队列模拟题 数组模拟队列

    题目很简单,给一个队列以及文件的位置,然后一个一个检查,如果第一个是优先级最高的就打印,否则放到队列后面,求所要打印的文件打印需要花费多长时间. 这里我用数组模拟队列实现,考虑到最糟糕的情况,必须把数 ...

  7. Windows Message Queue(优先队列)

    欢迎参加——BestCoder周年纪念赛(高质量题目+多重奖励) Windows Message Queue Time Limit: 2000/1000 MS (Java/Others)    Mem ...

  8. Windows Message Queue

    Windows Message Queue Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...

  9. hdu 1509 Windows Message Queue

    题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=1509 Windows Message Queue Description Message queue ...

随机推荐

  1. Fragstats软件使用及其景观生态学意义

    [转]Fragstats软件使用及其景观生态学意义     原文地址:http://blog.163.com/shuailai@126/blog/static/13238040820104152513 ...

  2. POJ1056 IMMEDIATE DECODABILITY【数据结构】

    题目地址:http://poj.org/problem?id=1056 Description An encoding of a set of symbols is said to be immedi ...

  3. “==”,比较的是引用 “equals方法”比较的是具体内容

    package com.java1234.chap03.sec08; public class Demo2 { public static void main(String[] args) { //“ ...

  4. OpenSSL 安全漏洞: heartbleed

    Heartbleed 是 2014年4月7日被广泛报道的一个 OpenSSL 安全漏洞,号称是灾难. 利用它能读取服务器上最多64k的内存,只要该服务器可以通过ssl连接.   Heartbleed ...

  5. 常用ASCII 码对照表

    目前计算机中用得最广泛的字符集及其编码,是由美国国家标准局(ANSI)制定的ASCII码(American Standard Code for Information Interchange,美国标准 ...

  6. Lambda(2)

    Lambda表达式是匿名方法的超集,处理匿名方法有的功能外,还有其他的功能: 1.能够推测出参数的类型,无需显示声明 2.支持语句块和表达式作为方法体 Lambda表达式的书写方式: Lambda表达 ...

  7. WPF自定义控件(二)——TextBox

    和之前一样,先来看看效果: 这个TextBox可设置水印,可设置必填和正则表达式验证. 验证?没错,就是验证! 就是在输入完成后,控件一旦失去焦点就会自动验证!会根据我开放出来的“是否可以为空”属性进 ...

  8. [转]null和""以及==与equals的区别

    String str1 = null; str引用为空 String str2 = ""; str引用为空串 直接点就是null没有分配内存空间,而""分配了内 ...

  9. vxworks启动

  10. swift 类 与 结构体

    这两天突然有人问我  swift里面 类和 结构体  有什么区别? 说实在的本人目前不太看好swift,相信很多人也是,oc 都 很成熟了. 本人目前不打算深入了解swift的原因swift  语言 ...