首页 > 其他分享 >LRU management (牛客多校) (map+list)

LRU management (牛客多校) (map+list)

时间:2023-04-11 19:00:44浏览次数:40  
标签:map management name int list mmp link var define

 

 

 

 思路: 利用map+list暴力模拟就彳于了

#pragma GCC optimize(2)
#include <bits/stdc++.h>
using namespace std;
#define IOS ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
#define MAXN 100001
#define INF (0x3f3f3f3f)
#define uint unsigned int
#define ll long long
#define ull unsigned long long
#define lowbit(x) ((x) & -(x))
#define DEBUG(a) cout<<#a<<" = "<<(a)<<endl;
//head
typedef struct Node{
    string id;
    int var;
    Node() {}
    Node(const string &_id, const int &_var): id(_id), var(_var) {}
}Node;
list<Node> link;
unordered_map<string,list<Node>::iterator> mmp;
uint m, M;  //m 当前 cache 大小; M 块大小
void update(string name, int var){
    if(mmp.find(name) == mmp.end()){
        link.push_back(Node(name, var));
        mmp.insert({name, --link.end()});
        if(m == M){
            mmp.erase(link.front().id);
            link.pop_front();
        }else{
            ++m;
        }
        cout << var <<'\n';
    }else{
        auto it = mmp[name];
        cout << it->var <<'\n';
        link.push_back(Node(name, it->var));
        link.erase(it);
        mmp[name] = --link.end();
    }
}
void query(string name, int var){
    if(mmp.find(name) == mmp.end()){
        cout << "Invalid\n";
    }else{
        auto it = mmp[name];
        if(var == 1){
            it = next(it);
            if(it == link.end()){
                cout << "Invalid\n";
            }else{
                cout << it->var << '\n';
            }
        }else if(var == -1){
            if(it == link.begin()){
                cout << "Invalid\n";
            }else{
                it = prev(it);
                cout << it->var << '\n';
            }
        }else{
            cout << it->var << '\n';
        }
    }
}
void solve(){
    link.clear();
    mmp.clear();
    m = 0;
    int Q;
    cin >> Q >> M;
    for(int i = 0;i < Q;++i){
        int op, var;
        string name;
        cin >> op >> name >> var;
        if(op){
            query(name, var);
        }else{
            update(name, var);
        }
    }
}
int main(){
    IOS
    int T;
    cin >> T;
    while(T--){
        solve();
    }
    return 0;
}
View Code

 

标签:map,management,name,int,list,mmp,link,var,define
From: https://www.cnblogs.com/Lamboofhome/p/17307305.html

相关文章

  • c#之winform—listview中排序 和 ICompare接口和IComparer接口的比较
    要在listview中实现排序,需要用listview.Sorting属性,它接受一个枚举类型的值list_view.Sorting=SortOrder.Ascending;//1为正序>其中None=0,//不排序Ascending=1,//升序Descending=2//降序然后在将ListViewItemComparer这个类的实例......
  • Go语言入门5(map哈希表)
    Map​ 哈希表是一种巧妙并且实用的数据结构。它是一个无序的key/value对的集合,其中所有的key都是不同的,然后通过给定的key可以在常数时间复杂度内检索、更新或删除对应的value。​ 在Go语言中,一个map就是一个哈希表的引用,map类型可以写为map[K]V,其中K和V分别对应key和value。m......
  • Android Kotlin mapTo
     在Kotlin中,mapTo是一种用于将集合中的元素转换成另一个集合的函数。它可以将一个集合的元素映射到另一个集合,并将结果添加到目标集合中。mapTo的语法如下:fun<T,R,C:MutableCollection<inR>>Iterable<T>.mapTo(destination:C,transform:(T)->R):C其中:T是源集......
  • c# list-Clone
    C#List引用类型克隆的3种方法这篇文章主要给大家介绍了关于C#List引用类型克隆的3种方法,包括反射、序列化(依赖Newtonsoft.Json)以及序列化(BinaryFormatter)的实现方法,需要的朋友可以参考借鉴,下面来一起看看吧前言有时候我们想克隆一个List去做别的事,而不影响原来的List,我们......
  • mmap模块介绍
    内存映射模块了解计算机内存内存映射是一种使用较低级别的操作系统API将文件直接加载到计算机内存中的技术。它可以显著提高程序中的文件I/O性能。术语内存是指随机存取内存或RAM.计算机内存类型:物理的虚拟的共享的使用内存映射时每种类型的内存都会发挥作用,因此让我......
  • Java8 - sum求和,将 List 集合转为 Map,key去重(groupingBy),sorted排序
    Java8-sum求和,将List集合转为Map,key去重(groupingBy),sorted排序packagecom.example.core.mydemo.java8;publicclassGoodsPriceDTO{privateIntegerid;privateStringgoodName;privateIntegeramount;//重写toString方法,System可以打印输出......
  • 4月10日list学习
    无论是string还是vector或者list他们的迭代器都有类似于指针的行为,解引用时都能访问其中的数值。2.list重载->运算符时比较奇怪,就像这样子,迭代器返回一个日期类型的指针,所以it-->的返回值是data的指针,常理来说应该是it->->-day才对,所以这里应该是省略了一个->运算符。3.this指......
  • python统计list中出现最多的数字
    要统计一个Python列表中出现最多的数字,可以使用Python内置的collections模块中的Counter类。Counter类可以用于统计可迭代对象中每个元素的出现次数,返回一个字典,其中键是元素,值是元素出现的次数。然后,可以使用Python内置的max()函数找到字典中的最大值。以下是一个示例代码:from......
  • map集合的3中遍历方式
    键找值://创建map的对象Map<String,String>map=newHashMap<>();//添加元素map.put("11","11");//通过找值,获取所有的键放到一个单列集合中去Set<String>key=map.keySet();//遍历键key.forEach(newConsume......
  • 扯下@EventListener这个注解的神秘面纱。
    你好呀,我是歪歪。前段时间看到同事在项目里面使用了一个叫做@EventListener的注解。在这之前,我知道这个注解的用法和想要达到的目的,但是也仅限于此,其内部工作原理对我来说是一个黑盒,我完完全全不知道它怎么就实现了“监听”的效果。现在既然已经出现在项目里面了,投入上生产上......