Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <algorithm>
- #include <bitset>
- #include <cctype>
- #include <cmath>
- #include <complex>
- #include <cstdio>
- #include <cstdlib>
- #include <cstring>
- #include <ctime>
- #include <deque>
- #include <fstream>
- #include <iostream>
- #include <list>
- #include <map>
- #include <memory>
- #include <queue>
- #include <set>
- #include <sstream>
- #include <stack>
- #include <string>
- #include <utility>
- #include <vector>
- #include <iomanip>
- using namespace std;
- /*** typedef ***/
- #define MEMSET_INF 127
- #define MEMSET_HALF_INF 63
- #define stream istringstream
- #define rep(i,n) for(__typeof(n) i=0; i<(n); i++)
- #define repl(i,n) for(__typeof(n) i=1; i<=(n); i++)
- #define FOR(i,a,b) for(__typeof(b) i=(a); i<=(b); i++)
- #define INF (1<<30)
- #define PI acos(-1.0)
- #define pb push_back
- #define ppb pop_back
- #define all(x) x.begin(),x.end()
- #define mem(x,y) memset(x,y,sizeof(x))
- #define memsp(x) mem(x,MEMSET_INF)
- #define memdp(x) mem(x,-1)
- #define memca(x) mem(x,0)
- #define eps 1e-9
- #define pii pair<int,int>
- #define pmp make_pair
- #define ft first
- #define sd second
- #define vi vector<int>
- #define vpii vector<pii>
- #define si set<int>
- #define msi map<string , int >
- #define mis map<int , string >
- typedef long long i64;
- typedef unsigned long long ui64;
- /** function **/
- #define SDi(x) sf("%d",&x)
- #define SDl(x) sf("%lld",&x)
- #define SDs(x) sf("%s",x)
- #define SD2(x,y) sf("%d%d",&x,&y)
- #define SD3(x,y,z) sf("%d%d%d",&x,&y,&z)
- #define pf printf
- #define sf scanf
- #define READ(f) freopen(f, "r", stdin)
- #define WRITE(f) freopen(f, "w", stdout)
- int main() {
- //READ("in.txt");
- freopen("RANDOM.txt","r",stdin);
- freopen("output.txt","w",stdout);
- int n;
- bool flag[6000];
- queue<int> q,pre_que;
- priority_queue <pii, vector<pii> ,greater<pii> > pq,prev_calc;
- cin>>n;
- for(int i=0; i<n; i++) {
- int x;
- scanf("%d",&x);
- q.push(x);
- }
- pre_que = q;
- printf("Size \t fault\n");
- for(int i=10; i<=n; i+=10){
- memset(flag,false,sizeof(flag));
- q = pre_que;
- int frame_size = i;
- int frame[6000] = {0},index[6000] = {0};
- int j = 0,fault=0;
- int prev_error;
- while(q.size()) {
- int top = q.front();
- q.pop();
- if(flag[top]){
- while(pq.top().sd != top){
- prev_calc.push(pq.top());
- pq.pop();
- }
- prev_calc.push(make_pair(n-q.size(),top));
- while(pq.size()){
- prev_calc.push(pq.top());
- pq.pop();
- }
- pq = prev_calc;
- while(prev_calc.size()) prev_calc.pop();
- continue;
- }
- if(j<frame_size){
- index[top] = j;
- frame[j++] = top;
- fault++;
- flag[top] = true;
- pq.push(make_pair(n - q.size(),top));
- continue;
- }
- pii pTop = pq.top();
- pq.pop();
- int value = pTop.sd;
- flag[value] = false;
- flag[top] = true;
- int find_idx = index[value];
- frame[ find_idx ] = top;
- pq.push(make_pair(n - q.size(),top));
- fault++;
- }
- while(pq.size()) pq.pop();
- printf("%4d : %5d ",frame_size,fault);
- if(i!=10) printf("%5d",abs(prev_error - fault));
- prev_error = fault;
- puts("");
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement