标签:poj
http://poj.org/problem?id=2051
| Time Limit: 1000MS | Memory Limit: 30000K | |
| Total Submissions: 9716 | Accepted: 4543 | 
Description
Query-1: "Every five minutes, retrieve the maximum temperature over the past five minutes."
Query-2: "Return the average temperature measured on each floor over the past 10 minutes."
Register Q_num Period
Input
Output
Sample Input
Register 2004 200 Register 2005 300 # 5
Sample Output
2004 2005 2004 2004 2005
Source
水题拉,就是学习下优先队列结构体咋写,注意重载时候大于其实是小的优先,因为stl默认是大根堆。。
/**
 * @author neko01
 */
//#pragma comment(linker, "/STACK:102400000,102400000")
#include <cstdio>
#include <cstring>
#include <string.h>
#include <iostream>
#include <algorithm>
#include <queue>
#include <vector>
#include <cmath>
#include <set>
#include <map>
using namespace std;
typedef long long LL;
#define min3(a,b,c) min(a,min(b,c))
#define max3(a,b,c) max(a,max(b,c))
#define pb push_back
#define mp(a,b) make_pair(a,b)
#define clr(a) memset(a,0,sizeof a)
#define clr1(a) memset(a,-1,sizeof a)
#define dbg(a) printf("%d\n",a)
typedef pair<int,int> pp;
const double eps=1e-8;
const double pi=acos(-1.0);
const int INF=0x7fffffff;
const LL inf=(((LL)1)<<61)+5;
struct item{
    int qnum,period,time;
    bool operator < (const item& a) const{
        return time>a.time||(time==a.time&&qnum>a.qnum); //这里注意大于号实际是time小的优先
    }
};
char s[23];
int main()
{
    priority_queue<item>q;
    while(~scanf("%s",s)&&strcmp(s,"#")!=0)
    {
        item cur;
        scanf("%d%d",&cur.qnum,&cur.period);
        cur.time=cur.period;
        q.push(cur);
    }
    int k;
    scanf("%d",&k);
    while(k--)
    {
        item cur=q.top();
        q.pop();
        printf("%d\n",cur.qnum);
        cur.time+=cur.period;
        q.push(cur);
    }
    return 0;
}
标签:poj
原文地址:http://blog.csdn.net/neko01/article/details/40866797