Advertisement
Kaidul

LRU

Mar 12th, 2013
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.13 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. #include <queue>
  4. #include <vector>
  5. #include <cstring>
  6.  
  7. using namespace std;
  8.  
  9. #define Max 1000
  10.  
  11. priority_queue <pair<int, int>, vector< pair<int, int> >, greater< pair<int, int> > > pq, temp;
  12. queue <int> pageStream, backup;
  13. bool flag[Max];
  14. int N, save, var, i, age, frameLength, fault, top, frame[Max], index[Max];
  15. int main() {
  16.     freopen("in.txt", "r", stdin);
  17.     cin >> N;
  18.     save = N;
  19.     while(N--) {
  20.         cin >> var;
  21.         pageStream.push(var);
  22.     }
  23.     backup = pageStream, N = save; // back-up
  24.     for (i = 10; i <= N; i += 10) {
  25.         // reseting variable and restore
  26.         pq = priority_queue< pair<int, int>, vector< pair<int, int> >, greater< pair<int, int> > > ();
  27.         memset(flag, false, sizeof flag);
  28.         frame[Max] = {0}, index[Max] = {0};
  29.         pageStream = backup, frameLength = i, age = fault = 0;
  30.         while(!pageStream.empty()) {
  31.             top = pageStream.front(), pageStream.pop();
  32.             if(age < frameLength) {
  33.                 index[top] = age;
  34.                 frame[age++] = top;
  35.                 fault++;
  36.                 flag[top] = true;
  37.                 pq.push(make_pair(N - pageStream.size(), top));
  38.                 continue;
  39.             }
  40.  
  41.             if(flag[top]) {
  42.                 while(!pq.empty()) {
  43.                     if(pq.top().second == top) {
  44.                         temp.push(make_pair(N - pageStream.size(), top));
  45.                         continue;
  46.                     }
  47.                     temp.push(pq.top());
  48.                     pq.pop();
  49.                 }
  50.                 pq = temp;
  51.                 temp = priority_queue< pair<int, int>, vector< pair<int, int> >, greater< pair<int, int> > > ();
  52.                 continue;
  53.             }
  54.  
  55.             var = pq.top().second;
  56.             pq.pop();
  57.             flag[var] = false;
  58.             flag[top] = true;
  59.             int find_idx = index[var];
  60.             frame[ find_idx ] = top;
  61.             pq.push(make_pair(N - pageStream.size(), top));
  62.             fault++;
  63.  
  64.         }
  65.         cout << frameLength << "  " << fault << "\n";
  66.  
  67.     }
  68.     return 0;
  69. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement