Description

Mirko is playing with stacks. In the beginning of the game, he has an empty stack denoted with number 0. In the

ith step of the game he will choose an existing stack denoted with v, copy it and do one of the following actions:

a. place number i on top of the new stack

b. remove the number from the top of the new stack

c. choose another stack denoted with w and count how many different numbers exist that are in the new stack

and in the stack denoted with w

The newly created stack is denoted with i.

Mirko doesn’t like to work with stacks so he wants you to write a programme that will do it for him. For each

operation of type b output the number removed from stack and for each operation of type c count the required

numbers and output how many of them there are.

Input

The first line of input contains the integer N (1 <= N <= 300000), the number of steps in Mirko’s game.

The steps of the game are chronologically denoted with the first N integers.

The ith of the following N lines contains the description of the ith step of the game in one of the following three

forms:

"a v" for operation of type a.

"b v" for operation of type b.

"c v w" for operation of type c.

The first character in the line denotes the type of operation and the following one or two denote the accompanying

stack labels that will always be integers from the interval [0,i-1].

For each operation of type b, the stack we’re removing the element from will not be empty.

Output

For each operation type b or c output the required number, each in their own line, in the order the operations

were given in the input.

Sample Input


5
a 0
a 1
b 2
c 2 3
b 4
11
a 0
a 1
a 2
a 3
a 2
c 4 5
a 5
a 6
c 8 7
b 8
b 8

Sample Output


2
1
2
2
2
8
8

Hint

In the beginning, we have the stack S0 = {}. In the first step, we copy S0 and place

number 1 on top, so S1 = {1}. In the second step, we copy S1 and place 2 on top of it, S2 = {1,2}. In the third step we

copy S2 and remove number 2 from it, S3 = {1}. In the fourth step we copy S2 and denote the copy with S4, then count

the numbers appearing in the newly created stack S4 and stack S3, the only such number is number 1 so the solution is 1.

In the fifth step we copy S4 and remove number 2 from it, S5 = {1}.

题意:一开始给你一个空栈,有3个操作。1.a v:先把编号为v的栈复制,然后在栈顶上放i 2.b v:先把编号为v的栈复制,然后去掉栈顶元素 3.c v w:先把编号为v的栈复制,然后数出同时存在于v,w栈的数的个数。开一个二叉树,如果是a操作,那么加入新的节点,如果是b操作,那么找到v的父节点,如果是c操作,那么全部输入读入后,求一个lca。

#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#include<vector>
#include<map>
#include<set>
#include<queue>
#include<stack>
#include<string>
#include<bitset>
#include<algorithm>
using namespace std;
typedef long long ll;
typedef long double ldb;
#define inf 99999999
#define pi acos(-1.0)
#define maxn 300005
vector<int>vec[maxn];
vector<int>::iterator it;
struct node{
int x,y;
}c[maxn]; int jd[maxn],fa[maxn],f[maxn][25],dep[maxn],ans[maxn],daibiao[maxn],vis[maxn],siz[maxn]; int lca(int x,int y){
int i;
if(dep[x]<dep[y]){
swap(x,y);
}
for(i=20;i>=0;i--){
if(dep[f[x][i] ]>=dep[y]){
x=f[x][i];
}
}
if(x==y)return x;
for(i=20;i>=0;i--){
if(f[x][i]!=f[y][i]){
x=f[x][i];y=f[y][i];
}
}
return f[x][0];
} int main()
{
int n,m,i,j,x,jiedian,jiedian1,y,k;
char s[10];
while(scanf("%d",&m)!=EOF)
{
jd[1]=1;
for(i=1;i<=m+1;i++)vec[i].clear();
int t=1;
daibiao[1]=1;
dep[1]=1;
for(i=2;i<=m+1;i++){
scanf("%s%d",s,&x);x++;
jiedian=jd[x];
if(s[0]=='a'){
t++;
dep[t]=dep[jiedian]+1;
jd[i]=t;
f[t][0]=jiedian;
daibiao[t]=i;
c[i].x=c[i].y=-2;
}
else if(s[0]=='b'){
ans[i]=daibiao[jiedian];
jiedian1=f[jiedian][0];
jd[i]=jiedian1;
c[i].x=c[i].y=-1;
}
else if(s[0]=='c'){
scanf("%d",&y);y++;
jd[i]=jiedian;
c[i].x=jd[i];c[i].y=jd[y];
}
}
for(k=1;k<=20;k++){
for(i=1;i<=m+1;i++){
f[i][k]=f[f[i][k-1]][k-1];
}
}
for(i=2;i<=m+1;i++){
if(c[i].x==-2)continue;
if(c[i].x==-1){
printf("%d\n",ans[i]-1);
}
else{
int gong=lca(c[i].x,c[i].y );
printf("%d\n",dep[gong]-1); }
}
}
return 0;
}

zjnu1726 STOGOVI (lca)的更多相关文章

  1. BZOJ 3083: 遥远的国度 [树链剖分 DFS序 LCA]

    3083: 遥远的国度 Time Limit: 10 Sec  Memory Limit: 1280 MBSubmit: 3127  Solved: 795[Submit][Status][Discu ...

  2. BZOJ 3626: [LNOI2014]LCA [树链剖分 离线|主席树]

    3626: [LNOI2014]LCA Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 2050  Solved: 817[Submit][Status ...

  3. [bzoj3123][sdoi2013森林] (树上主席树+lca+并查集启发式合并+暴力重构森林)

    Description Input 第一行包含一个正整数testcase,表示当前测试数据的测试点编号.保证1≤testcase≤20. 第二行包含三个整数N,M,T,分别表示节点数.初始边数.操作数 ...

  4. [bzoj2588][count on a tree] (主席树+lca)

    Description 给定一棵N个节点的树,每个点有一个权值,对于M个询问(u,v,k),你需要回答u xor lastans和v这两个节点间第K小的点权.其中lastans是上一个询问的答案,初始 ...

  5. [板子]倍增LCA

    倍增LCA板子,没有压行,可读性应该还可以.转载请随意. #include <cstdio> #include <cstring> #include <algorithm ...

  6. poj3417 LCA + 树形dp

    Network Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 4478   Accepted: 1292 Descripti ...

  7. [bzoj3626][LNOI2014]LCA

    Description 给出一个$n$个节点的有根树(编号为$0$到$n-1$,根节点为$0$). 一个点的深度定义为这个节点到根的距离$+1$. 设$dep[i]$表示点$i$的深度,$lca(i, ...

  8. (RMQ版)LCA注意要点

    inline int lca(int x,int y){ if(x>y) swap(x,y); ]][x]]<h[rmq[log[y-x+]][y-near[y-x+]+]])? rmq[ ...

  9. bzoj3631: [JLOI2014]松鼠的新家(LCA+差分)

    题目大意:一棵树,以一定顺序走完n个点,求每个点经过多少遍 可以树链剖分,也可以直接在树上做差分序列的标记 后者打起来更舒适一点.. 具体实现: 先求x,y的lca,且dep[x]<dep[y] ...

随机推荐

  1. JVM 源码分析(三):深入理解 CAS

    前言 什么是 CAS Java 中的 CAS JVM 中的 CAS 前言 在上一篇文章中,我们完成了源码的编译和调试环境的搭建. 鉴于 CAS 的实现原理比较简单, 然而很多人对它不够了解,所以本篇将 ...

  2. 最新最简洁Spring Cloud Oauth2.0 Jwt 的Security方式

    因为Spring Cloud 2020.0.0和Spring Boot2.4.1版本升级比较大,所以把我接入过程中的一些需要注意的地方告诉大家 我使用的版本是Spring boot 2.4.1+Spr ...

  3. Token验证的流程及如何准确的判断一个数据的类型

    Token验证的流程: 1,客户端使用用户名跟密码请求登录:2,服务端收到请求,去验证用户名与密码:3,验证成功后,服务端会签发一个 Token,再把这个 Token 发送给客户端:4,客户端收到 T ...

  4. 浅谈JVM垃圾回收

    JVM内存区域 要想搞懂啊垃圾回收机制,首先就要知道垃圾回收主要回收的是哪些数据,这些数据主要在哪一块区域. Java8和Java8之前的相同点有很多. 都有虚拟机栈,本地方法栈,程序计数器,这三个是 ...

  5. TCP/IP协议栈在Linux内核中的运行时序分析

    网络程序设计调研报告 TCP/IP协议栈在Linux内核中的运行时序分析 姓名:柴浩宇 学号:SA20225105 班级:软设1班 2021年1月 调研要求 在深入理解Linux内核任务调度(中断处理 ...

  6. 修改机器的hostname

    vi /etc/sysconfig/network hostname=你想设置的主机名 不重启器的情况下使显示名称变成 hostname  主机名

  7. CentOS6.8安装及各种坑

    实现目的:用U盘安装CentOS 6.2 32位系统 所需工具: 一.UltraISO(用来制作U盘启动) 下载地址:http://www.newhua.com/soft/614.htm 二.Cent ...

  8. XEE - Pikachu

    概述 XXE -"xml external entity injection"既"xml外部实体注入漏洞".概括一下就是"攻击者通过向服务器注入指定的 ...

  9. WPF NET5 Prism8.0的升级指南

    前言 ​ 曾经我以学习的目的写了关于在.NET Core3.1使用Prism的系列文章.NET Core 3 WPF MVVM框架 Prism系列文章索引,也谢谢大家的支持,事实上当初的版本则是Pri ...

  10. SAP表的锁定与解锁

    表的锁定模式有三种模式. lock mode有三种模式:分别是S,E,X.含义如下:     S (Shared lock, read lock)     E (Exclusive lock, wri ...