NC20185 [JSOI2010]缓存交换


题目

  • 原题地址:[JSOI2010]缓存交换
  • 题目编号:NC20185
  • 题目类型:堆、贪心
  • 时间限制:C/C++ 1秒,其他语言2秒
  • 空间限制:C/C++ 262144K,其他语言524288K

1.题目大意

  • Cache容量以及主存单元访问次序一致,求最少的非命中次数

2.题目分析

  • 每次删除缓存区中元素中下一次出现最晚的

3.题目代码

#include <bits/stdc++.h>

using namespace std;

int a[100005];
int f[100005];
int nex[100005];

int main() {
    int n, m;
    cin >> n >> m;
    for(int i=1;i<=n;i++) cin >> a[i];
    map<int, int> mp;
    priority_queue<int> q;
    for(int i=n;i>0;i--) {
        if(mp.count(a[i])) nex[i] = mp[a[i]];
        else nex[i] = 100001;
        mp[a[i]] = i;
    }
    int ans = 0;
    for(int i=1;i<=n;i++) {
        if(!f[i]){
            ans++;
            if(ans>m) f[q.top()] = 0, q.pop();
        }
        f[nex[i]] = 1, q.push(nex[i]);
    }        
    cout << ans << endl;   
}

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/282625.html

(0)
上一篇 2022年8月28日 10:24
下一篇 2022年8月28日 10:24

相关推荐

发表回复

登录后才能评论