當遇到需要將主存單元加進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命...