JSOI2010 快取交換

2022-04-09 09:35:00 字數 617 閱讀 8920

當遇到需要將主存單元加進cache的時候,就看cache裡是否滿了,滿了的話,就刪除離最靠後的那乙個,這樣一定最優。

但是網上部落格的**太長了。。。其實只需要判斷一下當前的優先佇列的top是否仍在cache中即可。

(重題:[poi2005]sam-toy cars,ac數+=2

#include #include 

#include

#include

#include

using

namespace

std;

priority_queue

q;const

int n=100005

;int

n,m,a[n],b[n],last[n],nxt[n],cnt,ans;

bool

vis[n];

intmain()

if(cnt

vis[a[q.top()]]=0

, ans++,q.pop();

q.push(nxt[i]);

vis[a[i]]=1

; }

cout

return0;

}

快取交換

JSOI2010 快取交換

考慮乙個貪心 就是每次我們都選擇佇列裡面之後最晚加入的元素彈出。維護乙個nxt陣列就行了。特判一下之後不會再加入的元素。如下 include include include include include include define maxn 200010 using namespace std ...

JSOI2010 快取交換 貪心 堆

題面 題解 首先我們要使得miss的次數盡量少,也就是要盡量保證每個點在被訪問的時候,這個點已經存在於cache中。那麼我們可以得到乙個結論 如果cache已滿,那麼我們就從cache裡面取出下乙個出現位置最遠的那個數 如果不出現了那麼令下乙個出現位置為inf 所以用堆維護即可。我們記錄乙個next...

1826 JSOI2010 快取交換

在計算機中,cpu只能和快取記憶體cache直接交換資料。當所需的記憶體單元不在cache中時,則需要從主存裡把資料調入cache。此時,如果cache容量已滿,則必須先從中刪除乙個。例如,當前cache容量為3,且已經有編號為10和20的主存單元。此時,cpu訪問編號為10的主存單元,cache命...