Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //{ Driver Code Starts
- // Initial Template for C++
- #include <bits/stdc++.h>
- using namespace std;
- // } Driver Code Ends
- // User function Template for C++
- class Solution{
- private:
- class Node
- {
- public:
- int val;
- Node* next;
- Node* prev;
- Node(int v)
- {
- val=v;
- next=NULL;
- prev=NULL;
- }
- };
- public:
- Node *head = new Node(-1);
- Node *tail = new Node(-1);
- map<int, Node*> mp;
- int size;
- void addNode(Node *ptr) {
- ptr->prev = head;
- ptr->next = head->next;
- head->next->prev = ptr;
- head->next = ptr;
- }
- void deleteNode(Node *ptr) {
- Node *next_of_ptr = ptr->next;
- Node *prev_of_ptr = ptr->prev;
- prev_of_ptr->next = next_of_ptr;
- next_of_ptr->prev = prev_of_ptr;
- }
- bool GET(int key)
- {
- if(mp.find(key) != mp.end()) {
- Node* resnode = mp[key];
- mp.erase(key);
- deleteNode(resnode);
- addNode(resnode);
- mp[key] = head->next;
- return 1;
- }
- return 0;
- }
- void SET(int key, int value)
- {
- if(mp.find(key) != mp.end()) {
- Node* resnode = mp[key];
- deleteNode(resnode);
- }
- if(mp.size() == value) {
- mp.erase(tail->prev->val);
- deleteNode(tail->prev);
- }
- addNode(new Node(key));
- mp[key] = head->next;
- }
- int pageFaults(int N, int C, int pages[]){
- // code here
- head->next = tail;
- tail->prev = head;
- int ans=0;
- for(int i=0;i<N;i++)
- {
- if(GET(pages[i]))
- {
- continue;
- }
- else
- {
- ans++;
- SET(pages[i],C);
- }
- }
- return ans;
- }
- };
- //{ Driver Code Starts.
- int main(){
- int t;
- cin>>t;
- while(t--){
- int N, C;
- cin>>N;
- int pages[N];
- for(int i = 0;i < N;i++)
- cin>>pages[i];
- cin>>C;
- Solution ob;
- cout<<ob.pageFaults(N, C, pages)<<"\n";
- }
- return 0;
- }
- // } Driver Code Ends
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement