[hihoCoder] #1306 : 股票价格 解题报告
来源:互联网 发布:mac上顿号怎么打 编辑:程序博客网 时间:2024/04/29 22:07
题目链接: http://hihocoder.com/problemset/problem/1306
- 样例输入
10P 1 77P 2 73P 5 70P 7 74QR 4QP 8 78R 5Q
- 样例输出
77 70 7474 70 7478 74 78
描述
小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。
输出
对于输入中每一条价格查询指令,输出当时最高、最低和最近的价格。
思路: 因为涉及到删除以前某个时间以前的信息, 并且还要统计最高和最低的股票价格, 因此可以用一个map来保存以时间为key的股票价格, 然后以二叉搜索数set保存以股票价格和时间的对. 这样做的好处是map是本身有序的, 这样当我们要删除信息的时候最前面的就是最早的股票信息, 然后我们从map中拿到要删除的股票信息到set中查找要删除的股票, 因为是二叉搜索树, 所有其查找和删除时间复杂度都是O(log n), 还是可以接受的.
代码如下:
/*************************************************************************> File Name: stock.cpp> Author: Maoting Ren> Mail: mren@g.clemson.edu> Created Time: Sun 22 May 2016 01:28:27 AM EDT ************************************************************************/#include<iostream>#include<set>#include<map>using namespace std;int main(){ int N, time, price, curTime; char ch; set<pair<int, int> > st; map<int, int> hash; cin>>N; for(int i =0; i< N; i++) { cin>>ch; if(ch == 'P') { cin >> time >> price; st.insert(make_pair(price, time)); hash[time] = price; curTime = time; } else if(ch == 'Q') cout << st.rbegin()->first << " " << st.begin()->first << " " << hash[curTime] << endl; else if(ch == 'R') { int dtime; cin >> dtime; while(hash.begin()->first<= dtime) { st.erase(make_pair(hash.begin()->second, hash.begin()->first)); hash.erase(hash.begin()); } } } return 0;}
- [hihoCoder] #1306 : 股票价格 解题报告
- hihocoder 股票价格
- hihocoder 股票价格
- hihocoder#1039 解题报告
- [hihoCoder] 岛屿 解题报告
- hihoCoder挑战赛20解题报告
- [hihoCoder] 任务分配 解题报告
- [hihoCoder] 二进制小数 解题报告
- [hihoCoder] 区域周长 解题报告
- [hihoCoder] 压缩字符串 解题报告
- hihoCoder--153周 股票价格
- hihocoder #1620 : 股票价格3
- hihocoder 1040 矩形判断解题报告
- [hihoCoder] #1305 : 区间求差 解题报告
- [hihoCoder] #1307 : 穿越禁区 解题报告
- [hihoCoder] 非法二进制数 解题报告
- [hihocoder]#1619“共同富裕” && #1620股票价格3
- hihoCoder 1236 Scores 解题报告(bitset + 分段暴力)
- 网站前端性能优化
- 纯手工实现adaboost(adaboost源码)
- storyboard 国际化文件自增自减
- 2016蓝桥杯总结
- 解决 js 加法,乘法不精确问题
- [hihoCoder] #1306 : 股票价格 解题报告
- AFNetworking NSURLConnect 到NSURLSession
- [整理]通过http1.1 GET, POST, PUT, PATCH, DELETE, HEAD, TRACE理解真正的RESTFUL
- android小知识——Android混淆打包及混淆后运行错误
- 淘宝数据抓取1.0-根据url抓取尺码和价格
- JSR-338 学习笔记(JPA)
- 部署 Bonobo Git Server 时,出现 HTTP 错误 500.19 解决办法
- HDU 1166 敌兵布阵(树状数组)
- Qt入门-文本框类QLineEdit和QTextEdit