POJ-3326(模拟登录统计)
2015-08-14 21:19
323 查看
题目:http://poj.org/problem?id=3326
题目本身没什么难度,本来想着是不是还得搞个线段树啥的,看了下数据量,暴力即可,这里用了一个标志位,标记是否对某个user的记录进行了预处理,有点“写时复制”的赶脚
题目本身没什么难度,本来想着是不是还得搞个线段树啥的,看了下数据量,暴力即可,这里用了一个标志位,标记是否对某个user的记录进行了预处理,有点“写时复制”的赶脚
#include <cstdio> #include <cstring> #include <vector> using namespace std; #define MAX_N 1005 #define MAX_M 10005 #define MIN_T 540 #define MAX_T 1260 int N, M, R, Q, time[MAX_N]; struct Record{ int t, id, flag; Record(int a, int b, int c): t(a), id(b), flag(c){} }; struct User{ vector<Record> history; char use[MAX_T+1]; bool parsed; void parse(){ memset(use + MIN_T, 0, MAX_T - MIN_T); for(int i = 0; i < history.size(); ++i){ Record& rec = history[i]; if(rec.flag) time[rec.id] = rec.t; else memset(use + time[rec.id], 1, rec.t - time[rec.id]); } parsed = true; } void ClearRecord(){ history.clear(); parsed = false; } void AddRecord(int t, int id, int flag){ history.push_back(Record(t, id, flag)); } int Query(int s, int e){ if(!parsed) parse(); int tot = 0; for(; s < e; ++s) tot += use[s]; return tot; } } user[MAX_M]; int main() { int i, t, c, u, f, s, e; while(scanf("%d%d", &N, &M), N){ for(i = 1; i <= M; ++i) user[i].ClearRecord(); scanf("%d", &R); for(i = 0; i < R; ++i){ scanf("%d%d%d%d", &t, &c, &u, &f); user[u].AddRecord(t, c, f); } scanf("%d", &Q); while(Q--){ scanf("%d%d%d", &s, &e, &u); printf("%d\n", user[u].Query(s, e)); } } return 0; }
相关文章推荐
- hdu 2896 AC自动机 保存编号
- zoj 3469 Food Delivery 区间DP(难)
- POJ--2367--Genealogical tree
- Summary for week5
- GUI
- uva12486 Space Elevator(数位dp)
- 定义自己的仪表板DashBoard - -kankanstyle
- 基数排序
- Jquery-截取过长字符串
- Python的中文处理
- 逃生
- LeetCode-Convert Sorted Array to Binary Search Tree
- ubuntu 15.04 编译Android-VLC
- JQuery找页面中的关键字
- 冯·诺依曼体系结构与哈佛体系结构
- PM2部署资料
- 哪款Linux发行版是你的最佳选择呢?
- LeetCode: Spiral Matrix螺旋矩阵
- 关于vmware虚拟机中ubuntu下使用minicom
- UVA - 1252 Twenty Questions 记忆化搜索 状态压缩