UVA 11423 - Cache Simulator (树状数组)

题目链接

题目大意:模仿磁盘缓冲区的工作机制,给你n个不同size的(递增的)磁盘缓冲区。给你要訪问的数据,依据LRU原则,问每一个size的磁盘分别有多少次miss(数据没有在缓存中就是miss)。

解题思路:由于数据最多有10^7,所以数据訪问的序列最长也就是10^7。

树状数组的每一个位置代表的是訪问序列的位置有没有数,由于假设之前的数在后面有訪问到的话,那么这个数就应该在后面了,这样前面的那个数就应该不存在。

做法:先将要訪问的数据序列处理出来,放在队列中,而且找到每一个数之前出现过的离它近期的那个位置。查询当前的位置和之前那个出现的位置之间有多少个数(假设dis个);小于dis的cache的miss++,然后要记得删除树状数组之前的那个位置上的值。

假设是没有出现过的数,那么miss肯定是要+1的。

注意:每次state都要又一次计算miss。

代码:

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
#include <map>using namespace std;const int N = 35;
const int maxn = 1e7 + 5;
#define lowbit(x) ((x)&(-x))int n;
int Miss[N], Cache[N];
int C[maxn];
char str[N];void add (int x, int v) {while (x < maxn) {C[x] += v;x += lowbit(x);}
}int sum (int x) {int ret = 0;while (x > 0) {ret += C[x];x -= lowbit(x);}return ret;
}struct Num {int value, pre;Num (int value , int pre) {this->value = value;this->pre = pre;}
};
queue<Num> Q;
map<int, int> vis;void init () {int b, y, k;memset (Miss, 0, sizeof(Miss));vis.clear();while (scanf ("%s", str) && str[0] != 'E') {if (str[0] == 'R') {scanf ("%d%d%d" , &b, &y, &k);for (int i = 0; i < k; i++) {Q.push(Num(b + y * i, vis[b + y * i]));vis[b + y * i] = Q.size();}} else if (str[0] == 'A') {scanf ("%d", &b);Q.push(Num (b, vis[b]));vis[b] = Q.size();} else {Q.push(Num (-1, 0));}}
}void solve () {init();memset (C, 0, sizeof (C));int cnt = 0;while (!Q.empty()) {if (Q.front().value >= 0) {add(cnt + 1, 1);if (Q.front().pre > 0) {int dis = sum(cnt + 1) - sum(Q.front().pre);
//                printf ("%d %d %d %d\n", Q.front().value, cnt + 1, Q.front().pre, dis);for (int i = 0; i < n; i++) {if (Cache[i] < dis)Miss[i]++;elsebreak;}    add(Q.front().pre, -1);} else {for (int i = 0; i < n; i++)Miss[i]++;}} else {for (int i = 0; i < n - 1; i++)printf ("%d ", Miss[i]);printf ("%d\n", Miss[n - 1]);memset (Miss, 0, sizeof (Miss));}Q.pop();cnt++;}
}int main () {scanf ("%d", &n);for (int i = 0; i < n; i++) scanf("%d", &Cache[i]);    solve();return 0;
};

转载于:https://www.cnblogs.com/blfbuaa/p/7131969.html

UVA 11423 - Cache Simulator (树状数组)相关推荐

  1. CodeForces - 1288E Messenger Simulator(树状数组)

    题目链接:点击查看 题目大意:给出n和m,表示n个人和m个操作,每次操作会将一个数x放到首位置上来,其他数往后顺延,比如: 初始时的数组为[4,1,5,3,2],当第一个x为 3 ,则序列变为[3,4 ...

  2. UVA 12086 (树状数组)

    题目网址:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...

  3. uva 12086 - Potentiometers(树状数组)

    题目链接:uva 12086 - Potentiometers 题目大意:给定n个整数,两个操作, S x y:把第x个数变成y M x y:计算第x个数到第y个数的总和 解题思路:用num数组记录每 ...

  4. Educational Codeforces Round 80 (Rated for Div. 2) E. Messenger Simulator 思维 + 树状数组

    传送门 文章目录 题意: 思路: 题意: 给你nnn个人,一开始位置分别为1,2,...,n1,2,...,n1,2,...,n,让后mmm个操作,每次都将某个人移动到最前面,其他人依次顺延,求每个人 ...

  5. uva 12086 线段树or树状数组练习

    题目链接   https://vjudge.net/problem/34215/origin 这个题就是线段树裸题,有两种操作,实现单点更新和区间和的查找即可,这里第一次学习使用树状数组完成. 二者相 ...

  6. Educational Codeforces Round 80 (Rated for Div. 2)SZU cf集训round2 C~E(dp,状压+二分,树状数组+逆向思维)

    C. Two Arrays 题目大意:就是给定两个整数n和m.计算数组对的数量(a,b),使得: 1 .两个阵列的长度都等于m: 2 .每个数组的每个元素都是1到n(包括1和n)之间的整数: 从1到m ...

  7. 树状数组:新手到大师 from TC

    Subscribe 树状数组(Binary Indexed Trees) November 15, 2012 作者:Hawstein 出处:http://hawstein.com/posts/bina ...

  8. HDU - 5542 The Battle of Chibi(树状数组+DP)

    UVA - 12983 The Battle of Chibi(树状数组+DP) HDU - 5542 The Battle of Chibi(树状数组+DP) #include<cstdio& ...

  9. hdu 4988 Little Pony and Boast Busters ( 树状数组+treap )

    题意: 给定n的两个排列, !@#¥%--&**(())*(&)+)*(&---- http://acm.hdu.edu.cn/showproblem.php?pid=4988 ...

最新文章

  1. python装饰器实例-基于Python 装饰器装饰类中的方法实例
  2. Android学习笔记(五)——数据存储(二)SQLite和ContentProvider
  3. 世上最详细的子网划分教程,看完保证会
  4. 龙剑服务器为什么总是维修,《龙剑》2014年3月13日更新维护公告
  5. php echarts 两条曲线图,使用laravel和ECharts实现折线图效果的例子
  6. php jquery实现弹窗,jquery 弹出层实现代码_jquery
  7. 在EF4.0中获取ObjectContext的数据库连接字符串
  8. python帮助系统函数_【Python】【基础知识】【内置函数】【help的使用方法】
  9. oracle怎么从大字段中取节点,Oracle数据库 获取CLOB字段存储的xml格式字符串指定节点的值...
  10. Oracle 游标的练习
  11. WPF之DataTemplate(转)
  12. RQNOJ 95 多多看DVD(加强版):01背包
  13. 技术人真的能做一辈子技术么?
  14. JVM学习笔记四_垃圾收集器与内存分配策略
  15. java struts xml文件设置----自定义日期转换器(局部,及全局类型转换器类)
  16. [JWF]使用脚本访问ActiveDirectory(二)GetObject()
  17. 串行通信技术SERDES
  18. scratch编程小游戏咬指大冒险
  19. 项目无法启动,Disconnected from the target VM
  20. EI期刊论文主题词检索

热门文章

  1. 按课程查询学生成绩C语言,C语言课程设计学生成绩管理系统
  2. partition拼字符串_Python字符串partition(),rpartition()
  3. java stream过滤_Java Stream过滤器
  4. Java项目Lombok
  5. 在Ubuntu 18.04上安装PostgreSQL 11和PgAdmin4
  6. 数据结构:二叉搜索树(BST)全部基本操作
  7. java中之内存溢出说明
  8. 图论 - 寻找fly真迹
  9. 【原】React中,map出来的元素添加事件无法使用
  10. Grunt-jsdoc生成JS API文档