hihoCoder--153周 股票价格

描述
小Hi最近在分析一支股票的价格走势,他需要一个程序来辅助分析。这个程序会接收3种消息(指令):

价格信息,格式是P timestamp price:表示这支股票在 timestamp 时刻价格是 price。

删除价格指令,格式是R timestamp:随着时间推移,小Hi会积累越来越多的价格数据。一些老旧的数据会变得不重要。这个指定会删除 timestamp 以前(包括 timestamp 时刻)的价格数据。

价格查询指令,格式是Q:小Hi希望程序返回这只股票最高、最低和最近的价格。注意已经被删除的价格不应该被统计。

给定一个包含以上3种信息(指令)的序列,你能否帮助小Hi完成这个程序呢?

输入
第1行包含一个整数 N (1 ≤ N ≤ 500000),表示消息(指令)序列的长度。

第2 - N+1行,每行包含一条消息或指令。

输入保证价格信息是按照 timestamp 升序排列的,并且出现的 timestamp 和价格小于100000000。

输出
对于输入中每一条价格查询指令,输出当时最高、最低和最近的价格。

样例输入
10
P 1 77
P 2 73
P 5 70
P 7 74
Q
R 4
Q
P 8 78
R 5
Q
样例输出
77 70 74
74 70 74
78 74 78

题解

#include <bits/stdc++.h>
using namespace std;

map<int, int> p;
multiset<int> prices;
int n;

int main() {
#ifndef ONLINE_JUDGE
freopen("data.in", "r", stdin);
#endif // ONLINE_JUDGE

    ios::sync_with_stdio(false);
    cin.tie(0);

    cin >> n;
    char op;
    int a, b;
    for(int i = 0; i < n; ++i){
        cin >> op;
        if(op == 'P'){
            cin >> a >> b;
            p[a] = b;
            prices.insert(b);
        }else if(op == 'R'){
            cin >> a;
            while(!p.empty() && p.begin()->first <= a){
                auto itr = prices.find(p.begin()->second);
                prices.erase(itr);
                p.erase(p.begin());
            }
        }else{
            int mx = *prices.rbegin(), mi = *prices.begin();
            int lru = p.rbegin()->second;
            cout << mx << " " << mi << " " << lru << endl;
        }
    }


    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值