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. 数模常用算法系列Matlab实现-----线性规划

    线性规划的 Matlab 标准形式 线性规划的目标函数可以是求最大值,也可以是求最小值,约束条件的不等号可以是小于号也可以是大于号.为了避免这种形式多样性带来的不便,Matlab 中规定线性 规划的标 ...

  2. oracle linux 7使用udev绑盘操作

    参考:Oracle Linux 7: Udev rule for ASM Cannot Place the ASM Disk in a Directory under /dev (Doc ID 221 ...

  3. MongoDB 基本操作(增改删)

    1.插入数据 和关系型数据库一样,增加数据记录可以使用insert语句,这是很简单的. 当插入数据时,如果此集合不存在,则MongoDB系统会自动创建一个集合,即不需要刻意预先创建集合 每次插入数据时 ...

  4. Lucene 4.6.1 java.lang.IllegalStateException: TokenStream contract violation

    这是旧代码在新版本Lucene中出现的异常,异常如下: Exception in thread "main" java.lang.IllegalStateException: To ...

  5. poj-3436.ACM Computer Factory(最大流 + 多源多汇 + 结点容量 + 路径打印 + 流量统计)

    ACM Computer Factory Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 10940   Accepted:  ...

  6. Python2和Python3中的rang()不同之点

    知道在python中rang()是一个有序的列表,在使用过程发现,Python2和Python3中的rang()不同之点,下面讲述不同之点 1,Python2 rang()用法 ->> r ...

  7. python学习笔记(7): 面向对象

    class Foo: #类中的函数 def bar(self): #功能阐述 print('Bar') pass def hello(self,name): print('i am %s' %name ...

  8. vue.js(14)--自定义全局指令

    <input type="text" class="form-control" v-model="keywords" v-focus& ...

  9. Vue实现active点击切换

    Vue实现active点击切换 循环的情况: 1.点击时传入index索引(获取当前点击的是哪个) @click=“active(index)” 2.将索引值传入class(索引等于几就第几个添加ac ...

  10. vue 组件间传值方式

    /* 父组件给子组件传值 1.父组件调用子组件的时候 绑定动态属性 <v-header :title="title"></v-header> 2.在子组件里 ...