hdoj 5249 KPI 【STL】

来源:互联网 发布:淘宝企业店铺 天猫 编辑:程序博客网 时间:2024/05/16 06:05

KPI

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 1093    Accepted Submission(s): 469


Problem Description
你工作以后, KPI 就是你的全部了. 我开发了一个服务,取得了很大的知名度。数十亿的请求被推到一个大管道后同时服务从管头拉取请求。让我们来定义每个请求都有一个重要值。我的KPI是由当前管道内请求的重要值的中间值来计算。现在给你服务记录,有时我想知道当前管道内请求的重要值得中间值。
 

Input
有大约100组数据。

每组数据第一行有一个n(1n10000),代表服务记录数。

接下来有n行,每一行有3种形式
  "in x": 代表重要值为x(0x109)的请求被推进管道。
  "out": 代表服务拉取了管道头部的请求。
  "query: 代表我想知道当前管道内请求重要值的中间值. 那就是说,如果当前管道内有m条请求, 我想知道,升序排序后第floor(m/2)+1th 条请求的重要值.

为了让题目简单,所有的x都不同,并且如果管道内没有值,就不会有"out"和"query"操作。
 

Output
对于每组数据,先输出一行

Case #i:
然后每一次"query",输出当前管道内重要值的中间值。
 

Sample Input
6in 874queryoutin 24622in 12194query
 

Sample Output
Case #1:87424622
 


这才是这一场里面最水的题目。。。

思路:用一个vector 和 queue去维护信息,入队和出队用vecotr迭代器插入删除就OK了。


AC代码:


#include <iostream>#include <cstdio>#include <cstring>#include <cmath>#include <cstdlib>#include <algorithm>#include <queue>#include <stack>#include <map>#include <set>#include <vector>#include <string>#define INF 0x3f3f3f3f#define eps 1e-8#define MAXN (10000+10)#define MAXM (200000+10)#define Ri(a) scanf("%d", &a)#define Rl(a) scanf("%lld", &a)#define Rf(a) scanf("%lf", &a)#define Rs(a) scanf("%s", a)#define Pi(a) printf("%d\n", (a))#define Pf(a) printf("%.2lf\n", (a))#define Pl(a) printf("%lld\n", (a))#define Ps(a) printf("%s\n", (a))#define W(a) while(a--)#define CLR(a, b) memset(a, (b), sizeof(a))#define MOD 1000000007#define LL long long#define lson o<<1, l, mid#define rson o<<1|1, mid+1, r#define ll o<<1#define rr o<<1|1#define PI acos(-1.0)using namespace std;int main(){    int N, kcase = 1;    while(Ri(N) != EOF)    {        vector<int> G;        vector<int> ::iterator it;        queue<int> Q;        printf("Case #%d:\n", kcase++);        W(N)        {            char op[10];            Rs(op); int x;            if(op[0] == 'i')            {                Ri(x);                it = upper_bound(G.begin(), G.end(), x);                G.insert(it, x);                Q.push(x);            }            else if(op[0] == 'o')            {                int v = Q.front(); Q.pop();                it = find(G.begin(), G.end(), v);                G.erase(it);            }            else                Pi(G[G.size()/2]);        }    }    return 0;}



0 0
原创粉丝点击