LRU management

字典树用来查找值,实现map<string,int>操作

tips:tot必须从一开始QAQ

#include<bits/stdc++.h>
using namespace std;
#define maxn 5000005
int trie[maxn][];
///字典树主要用来查找
int ed[maxn];
///记录字符串s对应的数据存在的下标
int dat[maxn];
int L[maxn],R[maxn];
///维护一下前驱后继关系
int A[maxn];
///记录一下字典树中指向该下标i的ed坐标,删除的时候要把ed[j]置为0
int tot=,//tot必须从一开始==
siz,num,s,e;//s,e维护一下头尾节点,便于维护前驱后继
void erase(int t)//传入删除数据的坐标信息
{
///int p=1;
//int t=find(s);
R[L[t]]=R[t];
L[R[t]]=L[t];
///字典树怎么处理?
///不处理QAQ???ed[p]???
if(t==s)
{
s=R[t];
}
if(t==e)
{
e=L[t];
}
dat[t]=R[t]=L[t]=;
ed[A[t]]=;
///把字典树中指向t的指针去掉
siz--;
}
void ins(int t,int dt)///维护下数据,处理下节点关系
{
dat[t]=dt;
///前驱后继维护?t-1?
///弄一个头指针,尾指针类似的下标维护
if(s==)s=e=t;///头节点为空
else L[R[e]=t]=e;//尾节点移到t
R[t]=;
e=t;
siz++;
}
void insert(char *s1,int t)
{
int n=strlen(s1);
int p=;//都从1开始
for(int i=; i<n; i++)
{
if(!trie[p][s1[i]-''])///都是判断trie[p][s1[i]-'0']
{
trie[p][s1[i]-'']=++tot;
}
p=trie[p][s1[i]-''];
} A[t]=p;
ed[p]=t;
}
int search(char *s)
{
int n=strlen(s);
int p=;
for(int i=; i<n; i++)
{
if(!trie[p][s[i]-''])return false;
else p=trie[p][s[i]-''];
}
return ed[p];///维护在数组中信息 }
int T,n,m;
void init()
{ /*while(s){
erase(s);
}*/
//trie[1][0]=trie[1][1]=0;
for(int i=; i<=max(tot,num); i++)
{
A[i]=;//dat[i]=0;
dat[i]=L[i]=R[i]=ed[i]=;
for(int j=; j<; j++)trie[i][j]=;
} tot=;siz=;
s=e=;
num=; } int main()
{
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&n,&m);
init();
int op,d;
char s1[];
while(n--)
{
scanf("%d%s%d",&op,s1,&d);
if(op==)
{
int x=search(s1);
// cout<<x<<" "<<s1<<endl;
if(x)
{ cout<<dat[x]<<'\n';
d=dat[x];
erase(x);
}
else
{
cout<<d<<'\n';
}
num++;
ins(num,d);
insert(s1,num);
//int _x=search(s1);
//cout<<"SEAR"<<s1<<' '<<_x<<" "<<dat[_x]<<endl;
//cout<<"INS"<<num<<" "<<s1<<" "<<d<<endl;
if(siz>m)
{
//puts("MAN");
// cout<<"ERA"<<s<<endl;
erase(s);
}
}
else
{
int x=search(s1);
if(x==)
{
//puts("MY");
puts("Invalid");
}
else if(d==&&R[x]==)
{
puts("Invalid");
}
else if(d==-&&L[x]==)
{
puts("Invalid");
}
else
{
if(d==)cout<<dat[x]<<'\n';
else if(d==)cout<<dat[R[x]]<<'\n';
else cout<<dat[L[x]]<<'\n'; } } }
} }

LRU management的更多相关文章

  1. 牛客第三场 J LRU management

    起初看到这道题的时候,草草就放过去了,开了另一道题,结果开题不顺利,总是感觉差一点就可以做出来,以至于一直到最后都没能看这道题qaq 题意:类似于操作系统上讲的LRU算法,有两个操作,0操作代表访问其 ...

  2. 2019牛客暑期多校训练营(第三场) - J - LRU management - 模拟

    https://ac.nowcoder.com/acm/contest/883/J 根据这个数据结构的特点,也就是计算机组成原理里面学过的cache的LRU管理算法,每次访问都会在cache中查询一页 ...

  3. 2019牛客暑期多校训练营(第三场) J LRU management 模拟链表操作

    输入n, m,n表示n种操作,m表示最多可以容纳m个串. 第一种操作:先在容器里找是否存在这个串,如果不存在,则添加在末尾,这个串携带了一个值v. 如果存在,则先把之前存在的那个拿出来,然后在后面添加 ...

  4. 【2019牛客暑期多校第三场】J题LRU management

    题目链接 题意 好吧,这道题我其实看都没看过,队友跟我说了说这道题是模拟题,卡时间.然后我就上了-- 大致就是维护一个线性表,然后有两种操作:插入.查询 插入时,如果这个值(string)之前出现过, ...

  5. 牛客多校第三场J LRU management(双向链表)题解

    题意: 给一个长度为\(m\)的队列,现给定以下操作: \(opt=0\),插入一个串,如果不在队里直接插入栈尾,如果超出\(m\)删队首:在队里就拿出来重新放到队尾,返回\(v\)值. \(opt= ...

  6. 2019牛客多校第三场J-LRU management(map+双向链表)

    LRU management 题目传送门 解题思路 用map索引对应地址,用双向链表维护序列. 代码如下 #include <bits/stdc++.h> #define INF 0x3f ...

  7. Redis info参数总结(转)

    Redis官网对 info 已经讲解的比较清楚的,参考文档 . 可以看到,info的输出结果是分几块的,有Servers.Clients.Memory等等,通过info后面接这些参数,可以指定输出某一 ...

  8. 关于Redis info的参数总结

    Redis官网对 info 已经讲解的比较清楚的,参考文档 .可以看到,info的输出结果是分几块的,有Servers.Clients.Memory等等,通过info后面接这些参数,可以指定输出某一块 ...

  9. redis info命令结果释疑

    redis的性能数据这块用 info 命令就可以获取的比较全面了,下面是对info信息返回值的解释: # 参考:http://redis.io/commands/info # # # Server r ...

随机推荐

  1. c# Thread5——线程同步之基本原子操作。Mutex互斥量的使用

    之前的博文也说到了如果多线程对于访问的公共资源操作都是原子操作,那么可以避免竞争条件.关于多线程的竞争可以百度. 1.执行最基本的原子操作 c#提供了一系列供我们使用的原子操作的方法和类型,比如我们的 ...

  2. 利用Python进行windows系统上的图像识别与点击(Mac OS系统也可以)

    系统环境: 1.安装了python 2.安装了pyautogui模块 windows系统:无需安装依赖模块,在cmd中直接输入pip install pyautogui即可完成安装 Mac OS系统: ...

  3. Docker command line 学习笔记

    deprecated ! 以后直接对这个更新 http://wangzhezhe.github.io/blog/2015/08/10/docker-operations/ 之前整理了好久,每次用到一点 ...

  4. Proteus报错处理经验:power rails ‘GND’ and 'VCC/VDD' are interconnected in net VCC

    1 前言 初学Proteus,画好原理图后遇到了power rails 'GND' and 'VCC/VDD' are interconnected in net VCC的报错. 尝试了网上的解决办法 ...

  5. oracle--增删改、表备份、集合运算

    truncate 插入数据学习及数据的备份 单表查询语句(select) 1.插入数据(insert) 1.语法规范 insert into 表名(字段1,字段2,字段3,....)values('值 ...

  6. CentOS7 redhat7 linux系统1分钟安装Zabbix web 监控 服务器

    一.准备工作OS:centos7.4Zabbix version:3.4.6(2018/1/15日上线的新版本)Database:MariaDB关闭防火墙:systemctl stop firewal ...

  7. Varint数值压缩存储方法

    coming from http://www.cnblogs.com/smark/archive/2012/05/03/2480034.html 在编写网络通讯的时候我们经常需要把一些数据存储到byt ...

  8. MySQL学习笔记(上)

    在进行SQL注入原理的剖析的时候,对MySQL数据库掌握薄弱,参照菜鸟教程的MySQL教程速刷一遍MySQL 关于MySQL MySQL是最流行的关系型数据库管理系统,在WEB方面MySQL是最好的R ...

  9. JDK的下载与Java运行环境

    JDK简介 什么是JDK JDK是Java Development Kit的缩写,意思是Java开发工具包.JDK就好比作人的心脏,人没有了心脏,生命也就失去存在的意义.Java也一样,JDK就是它的 ...

  10. 「Vue.js」Vue-Router + Webpack 路由懒加载实现

    一.前言 当打包构建应用时,Javascript 包会变得非常大,影响页面加载.如果我们能把不同路由对应的组件分割成不同的代码块,然后当路由被访问的时候才加载对应组件,这样就更加高效了.结合 Vue ...