zoukankan      html  css  js  c++  java
  • bzoj 1206: [HNOI2005]虚拟内存

    用一个结构体来存储每一页的标号,访问次数和进入内存时间

    然后用堆来弄这些东西。

    在堆外开一个at数组判是否在内存里面,开一个delta数组用作懒标记存储访问次数的变更

    然后在一个外存里的东西要入内存时进行判断和懒标记的加入。。

    记得要离散化!!

     1 #include <cstdio>
     2 #include <cstring>
     3 #include <algorithm>
     4 #include <iostream>
     5 #include <queue>
     6 using namespace std;
     7 #define N 1000008
     8 
     9 struct page
    10 {
    11     int num,v,t;
    12     bool operator <(const page &b) const
    13         {if (v == b.v) return (t > b.t); return (v > b.v);}
    14     page(int n1,int v1,int t1){num = n1; v = v1; t = t1;}
    15 };
    16 
    17 int n,m,delta[N],ans,s[N],a[N],b[N];
    18 bool at[N];
    19 priority_queue<page> Q;
    20 
    21 bool cmp(int x,int y)
    22 {
    23     return (a[x] < a[y]);
    24 }
    25 
    26 void init()
    27 {
    28     scanf("%d%d",&n,&m);
    29     for (int i = 1;i <= m;i++) scanf("%d",&a[i]),s[i] = i;//输入 
    30     sort(&s[1],&s[m+1],cmp);
    31     for (int i = 1;i <= m;i++) 
    32         b[s[i]] = (a[s[i]] == a[s[i-1]]?b[s[i-1]]:b[s[i-1]]+1);//离散化 
    33 }
    34 
    35 int main()
    36 {
    37 //    freopen("input.txt","r",stdin);
    38     
    39     init();
    40     for (int i = 1;i <= m;i++)
    41     {
    42         int k = b[i];
    43         if (at[k]) delta[k]++,ans++;
    44         else 
    45         {
    46             if (Q.size() == n)
    47                 while (1)
    48                 {
    49                     page x = Q.top();
    50                     Q.pop(); at[x.num] = false;
    51                     if (!delta[x.num]) break ;
    52                     x.v += delta[x.num],delta[x.num] = 0;
    53                     if (Q.empty() || Q.top() < x) break ;
    54                     Q.push(x); at[x.num] = true;
    55                 }
    56             Q.push(page(k,1,i)); at[k] = true;
    57         }
    58     }
    59     printf("%d
    ",ans);
    60     return 0;
    61 }
    View Code
  • 相关阅读:
    关于控制地址控件的代码
    获取某个设计项列表界面上查询框中的值的代码
    js中不同值的替换
    js截取字符串方法实例
    抛异常语句的种类及区别
    从获取结果中去除重复记录
    泛微E8升级E9代码修改
    中控考勤数据转换
    WEB打印,分页首行自动带出栏目标题
    VS附加进程调试IIS网站
  • 原文地址:https://www.cnblogs.com/wulala979/p/3537031.html
Copyright © 2011-2022 走看看