对于每一个节点,我们只需要知道他上len次插入(len是这个队列的元素个数)时所插入的元素就可以了

那么只需要将所有插入建为一棵树,然后找len次祖先就可以了,这个用倍增维护即可

还有一种比较神奇的做法,详见loj讨论(是我太菜了吧)

 1 #include<bits/stdc++.h>
2 using namespace std;
3 #define N 1000005
4 #define ui unsigned int
5 ui V,P,n,p,x,y,ans,r[N],a[N],sh[N],f[N][21];
6 char s0[600000],*s1=s0,*s2=s1;
7 #define I ((s1==s2)&&(s2=(s1=s0)+fread(s0,1,600000,stdin),s1==s2)?32:*s1++)
8 void read(ui &x){
9 ui c;
10 x=0;
11 while (isspace(c=I));
12 do x=x*10+c-48;
13 while (isdigit(c=I));
14 }
15 int main(){
16 read(n);
17 read(P);
18 for(int i=1;i<=n;i++){
19 read(p);
20 read(x);
21 if (P)x^=ans;
22 if (p==1){
23 read(a[r[i]=++V]);
24 if (P)a[V]^=ans;
25 sh[i]=sh[x]+1;
26 f[V][0]=r[x];
27 for(int j=1;j<=20;j++)f[V][j]=f[f[V][j-1]][j-1];
28 }
29 else{
30 y=r[i]=r[x];
31 sh[i]=sh[x]-1;
32 for(int j=0;j<=20;j++)
33 if (sh[i]&(1<<j))y=f[y][j];
34 ans=ans*31+a[y];
35 }
36 }
37 printf("%u",ans);
38 }

[loj6203]可持久化队列的更多相关文章

  1. 基于Berkeley DB实现的持久化队列

    转自:http://guoyunsky.iteye.com/blog/1169912 队列很常见,但大部分的队列是将数据放入到内存.如果数据过多,就有内存溢出危险,而且长久占据着内存,也会影响性能.比 ...

  2. Codeforces Gym 100431G Persistent Queue 可持久化队列

    Problem G. Persistent QueueTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/vjudg ...

  3. python rabbitMQ持久化队列消息

    import pika connection = pika.BlockingConnection( pika.ConnectionParameters('localhost'))#建立一个最基本的so ...

  4. 用mappedbytebuffer实现一个持久化队列【转】

    自从前段时间的一个事故让队列里缓存的大量关键数据丢失后,一直琢磨着弄一个能持久化到本地文件的队列,这样即使系统再次发生意外,我也不至于再苦逼的修数据了.选定使用mappedbytebuffer来实现, ...

  5. RabbitMQ之消息持久化(队列持久化、消息持久化)

    rabbitMQ不支持数据库的持久化,只支持内存以及文件持久化 https://blog.csdn.net/bwh0520/article/details/78746873 http://blog.y ...

  6. python---RabbitMQ(1)简单队列使用,消息依次分发(一对一),消息持久化处理

    MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法.应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们.消息传递指的是程序之间 ...

  7. 【python】-- RabbitMQ 队列消息持久化、消息公平分发

    RabbitMQ 队列消息持久化 假如消息队列test里面还有消息等待消费者(consumers)去接收,但是这个时候服务器端宕机了,这个时候消息是否还在? 1.队列消息非持久化 服务端(produc ...

  8. 在C#中使用消息队列RabbitMQ

    1.什么是RabbitMQ.详见 http://www.rabbitmq.com/. 作用就是提高系统的并发性,将一些不需要及时响应客户端且占用较多资源的操作,放入队列,再由另外一个线程,去异步处理这 ...

  9. 消息队列-推/拉模式学习 & ActiveMQ及JMS学习

    一种分类是推和拉 . 还有一种分类是 Queue 和 Pub/Sub . 先看的这一篇:http://blog.csdn.net/heyutao007/article/details/50131089 ...

随机推荐

  1. Linux中的文件使用FTP进行文件备份

    注意!!! 本文是在linux中进行ftp备份(备份到另一个linux服务器) 上传思路: 1.每次上传文件时, 后台接收文件, 使用transferTo上传到Linux服务器 2.把文件路径 + F ...

  2. Redis大集群扩容性能优化实践

    一.背景 在现网环境,一些使用Redis集群的业务随着业务量的上涨,往往需要进行节点扩容操作. 之前有了解到运维同学对一些节点数比较大的Redis集群进行扩容操作后,业务侧反映集群性能下降,具体表现在 ...

  3. scala基础篇 源码中 :_*的作用

    在scala源码中有大量的:_*,其作用是把Array.list转换为参数列表,作为变长参数传入参数列表 例子: def sumx(a:Int*)={ a.sum } val a=Range(1,9) ...

  4. 初学Python-day1 运算符和数据类型

  5. javascript-jquery插件

    1.jquery创建插件 jQuery.extend({插件名:函数体,插件名:函数体}): html部分 <div id="div1">开始动画</div> ...

  6. 改善深层神经网络-week1编程题(Initializaion)

    Initialization 如何选择初始化方式,不同的初始化会导致不同的结果 好的初始化方式: 加速梯度下降的收敛(Speed up the convergence of gradient desc ...

  7. kivy画板

    from kivy.app import App from kivy.graphics import Line, Color # 引入绘图线条,颜色 from kivy.uix.widget impo ...

  8. Git: 搭建一个本地私人仓库

    Git: 搭建一个本地私人仓库 寝室放个电脑.实验室也有个电脑 为进行数据同步,充分利用实验室的服务器搭建了个本地私人仓库 1. 安装流程 当然首先保证服务器上与PC机上都已经安装了可用的Git 在P ...

  9. UltraSoft - Alpha - Scrum Meeting 7

    Date: Apr 22th, 2020. Scrum 情况汇报 进度情况 组员 负责 昨日进度 后两日任务 CookieLau PM 完成课程中心的json格式传递 完成邮箱验证机制 刘zh 前端 ...

  10. 【BZOJ 1419】Red is good [概率DP]

    我 是 Z Z 概率好玄啊(好吧是我太弱.jpg Description 桌面上有R张红牌和B张黑牌,随机打乱顺序后放在桌面上,开始一张一张地翻牌,翻到红牌得到1美元,黑牌则付出1美元.可以随时停止翻 ...