Advertisement
jayati

Page Faults in LRU

Oct 26th, 2023
621
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.30 KB | None | 0 0
  1. //{ Driver Code Starts
  2. // Initial Template for C++
  3.  
  4.  
  5.  
  6. #include <bits/stdc++.h>
  7. using namespace std;
  8.  
  9. // } Driver Code Ends
  10. // User function Template for C++
  11.  
  12. class Solution{
  13. private:
  14. class Node
  15. {
  16.     public:
  17.     int val;
  18.     Node* next;
  19.     Node* prev;
  20.     Node(int v)
  21.     {
  22.         val=v;
  23.         next=NULL;
  24.         prev=NULL;
  25.     }
  26. };
  27. public:
  28.     Node *head = new Node(-1);
  29.     Node *tail = new Node(-1);
  30.     map<int, Node*> mp;
  31.       int size;
  32.    
  33.     void addNode(Node *ptr) {
  34.         ptr->prev = head;
  35.         ptr->next = head->next;
  36.         head->next->prev = ptr;
  37.         head->next = ptr;
  38.  
  39.     }
  40.    
  41.     void deleteNode(Node *ptr) {
  42.         Node *next_of_ptr = ptr->next;
  43.         Node *prev_of_ptr = ptr->prev;
  44.        
  45.         prev_of_ptr->next = next_of_ptr;
  46.         next_of_ptr->prev = prev_of_ptr;
  47.        
  48.        
  49.     }
  50.     bool GET(int key)
  51.     {
  52.         if(mp.find(key) != mp.end()) {
  53.             Node* resnode = mp[key];
  54.             mp.erase(key);
  55.             deleteNode(resnode);
  56.  
  57.            
  58.             addNode(resnode);
  59.             mp[key] = head->next;
  60.            
  61.             return 1;
  62.         }
  63.         return 0;
  64.     }
  65.    
  66.     void SET(int key, int value)
  67.     {
  68.         if(mp.find(key) != mp.end()) {
  69.             Node* resnode = mp[key];
  70.             deleteNode(resnode);
  71.         }
  72.         if(mp.size() == value) {
  73.             mp.erase(tail->prev->val);
  74.             deleteNode(tail->prev);
  75.         }
  76.        
  77.        
  78.         addNode(new Node(key));
  79.         mp[key] = head->next;
  80.     }
  81.     int pageFaults(int N, int C, int pages[]){
  82.         // code here
  83.        head->next = tail;
  84.        tail->prev = head;
  85.        int ans=0;
  86.        for(int i=0;i<N;i++)
  87.        {
  88.            if(GET(pages[i]))
  89.            {
  90.                continue;
  91.            }
  92.            else
  93.            {
  94.                ans++;
  95.                SET(pages[i],C);
  96.            }
  97.        }
  98.        return ans;
  99.     }
  100. };
  101.  
  102. //{ Driver Code Starts.
  103.  
  104. int main(){
  105.     int t;
  106.     cin>>t;
  107.     while(t--){
  108.         int N, C;
  109.         cin>>N;
  110.         int pages[N];
  111.         for(int i = 0;i < N;i++)
  112.             cin>>pages[i];
  113.         cin>>C;
  114.        
  115.         Solution ob;
  116.         cout<<ob.pageFaults(N, C, pages)<<"\n";
  117.     }
  118.     return 0;
  119. }
  120. // } Driver Code Ends
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement