zoukankan      html  css  js  c++  java
  • [JSOI2010]缓存交换

    当遇到需要将主存单元加进cache的时候,就看cache里是否满了,满了的话,就删除离最靠后的那一个,这样一定最优。
    但是网上博客的代码太长了。。。其实只需要判断一下当前的优先队列的top是否仍在cache中即可。

    (重题:[POI2005]SAM-Toy Cars,AC数+=2

    #include <iostream>
    #include <algorithm>
    #include <cstdio>
    #include <cmath>
    #include <queue>
    using namespace std;
    priority_queue<int>q;
    const int N=100005;
    int n,m,a[N],b[N],last[N],nxt[N],cnt,ans;
    bool vis[N];
    int main() {
        scanf("%d%d",&n,&m);
        for(int i=1;i<=n;i++) scanf("%d",&a[i]),b[i]=a[i];
        sort(b+1,b+1+n);int u=unique(b+1,b+1+n)-b-1;
        for(int i=1;i<=n;i++)
        a[i]=lower_bound(b+1,b+1+u,a[i])-b,
        nxt[last[a[i]]]=i,last[a[i]]=i;
        for(int i=1;i<=u;i++) nxt[last[i]]=n+i,a[n+i]=i;
        for(int i=1;i<=n;i++) {
            while(q.size()&&vis[a[q.top()]]==false)
            q.pop();
            if(vis[a[i]]) {q.push(nxt[i]);continue;}
            if(cnt<m) {
                vis[a[i]]=1,
                cnt++,ans++,
                q.push(nxt[i]);
                continue;
            }
            vis[a[q.top()]]=0,
            ans++,q.pop();
            q.push(nxt[i]);
            vis[a[i]]=1;
        }
        cout<<ans<<endl;
        return 0;
    }
    缓存交换
    我是咸鱼。转载博客请征得博主同意Orz
  • 相关阅读:
    雅虎35条优化黄金守则
    安装入门
    NPOI 2.0 Excel读取显示
    STL算法
    MVVM框架avalon在兼容旧式IE
    Asp.Net MVC3.0网站统计登录认证的在线人数
    Windows Server 服务器安全配置
    SignalR的服务器广播
    angularjs + seajs构建Web Form3
    MVC应用程序显示上传的图片
  • 原文地址:https://www.cnblogs.com/sdfzhsz/p/9674808.html
Copyright © 2011-2022 走看看