zoukankan      html  css  js  c++  java
  • [loj6203]可持久化队列

    对于每一个节点,我们只需要知道他上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 }
    View Code
  • 相关阅读:
    Flume-概述-安装
    Hive-函数
    Hive_查询
    Hive-DML数据操作
    JDBC-文档
    Hive-DDL数据定义
    Hive-数据类型
    理解RESTful架构
    REST介绍
    [转]详述DHCP服务器的三种IP分配方式
  • 原文地址:https://www.cnblogs.com/PYWBKTDA/p/11430549.html
Copyright © 2011-2022 走看看