XOR key「建议收藏」

XOR key「建议收藏」可持久化trie

大家好,又见面了,我是你们的朋友全栈君。

51nod 1295
可持久化trie,其实和可持久化线段树差不多
之前写过一次,现在加深了一点点对于可持久化的理解

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>

#define FOR(i,a,b) for(int i=a;i<=b;i++)
#define ROF(i,a,b) for(int i=a;i>=b;i--)
#define mem(i,a) memset(i,a,sizeof(i))
#define lson l,mid,rt<<1
#define rson mid+1,r,rt<<1|1
#define ll long long
#define LL long long
using namespace std;
const int maxn = 5e4+7;
int tr[maxn*40][2],sum[maxn*40],root[maxn];
int n,m,cnt=0,x;

void update(int len,int x,int &u,int v) {
    u = ++cnt;
    for(int i = 0;i<2;i++) tr[u][i] = tr[v][i];
    sum[u] = sum[v]+1;
    if(len==0) return;
    update(len-1,x,tr[u][(x>>len-1)&1],tr[v][(x>>len-1)&1]);
}
int query(int len,int u,int v) {
    int now = 1-((x>>(len-1))&1);
    if(len==0) return 0;
    if(sum[tr[u][now]] > sum[tr[v][now]]) 
        return query(len-1,tr[u][now],tr[v][now])+(1<<(len-1));
    return  query(len-1,tr[u][1-now],tr[v][1-now]);
}

int main() {
    scanf("%d%d",&n,&m);
    for(int i = 1;i<=n;i++) {
        scanf("%d",&x);
        update(30,x,root[i],root[i-1]);
    }
    int l,r;
    for(int i = 1;i<=m;i++) {
        scanf("%d%d%d",&x,&l,&r);
        printf("%d\n",query(30,root[r+1],root[l]));
    }
    return 0;
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/160207.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 二叉树进行中序遍历的结果_层次遍历和中序遍历构建二叉树

    二叉树进行中序遍历的结果_层次遍历和中序遍历构建二叉树目录1.二叉树1.中序遍历1.二叉树1.中序遍历不论是二叉树、二叉排序树(搜索树),遍历是基础。至于什么是中序遍历,中规中矩的理论,可以参考这篇文章,二叉树中序遍历(递归+非递归)Java.,其中详细介绍了中序遍历实现的方法和结果,包括递归和非递归两种方式。…

    2025年11月15日
    3
  • JDK1.8下载安装(Windows版)

    JDK1.8下载安装(Windows版)官网下载JDK在oracle上的下载地址:https://www.oracle.com/technetwork/java/javase/downloads/index.html,根据自己的需要,我这儿选择的是“JavaSE8u201/JavaSE8u202”,点击【JDK-DOWNLOAD】,打开第二张截图,如图选择接受,然后下载“JavaSEDevelopmentKit…

    2022年7月16日
    18
  • 软测试综述——PV操作

    软测试综述——PV操作

    2022年1月8日
    49
  • 自动下载forumdisplay.php,forumdisplay.php

    自动下载forumdisplay.php,forumdisplay.php/*[Discuz!](C)2001-2009ComsenzInc.ThisisNOTafreeware,useissubjecttolicenseterms$Id:forumdisplay.php169462008-11-2805:30:28Ztiger$*/define(‘CURSCRIPT’,’forumdisplay’);require_once’…

    2022年7月13日
    14
  • MySQL——MySQL 图形化管理工具的介绍

    MySQL——MySQL 图形化管理工具的介绍文章目录MySQL——MySQL图形化管理工具的介绍1、MySQLWorkbench2、Navicat3、SQLyog4、DBeaver5、DataGripMySQL——MySQL图形化管理工具的介绍MySQL图形化管理工具极大地方便了数据库的操作与管理,常用的图形化管理工具有:MysQLWorkbench、phpMyAdmin、NavicatPreminum、MySQLDumper、SQLyog、dbeaver、MysQLODBcConnector、DataGrip。1、MySQL

    2022年6月30日
    26
  • java inputstream读取文件_java如何获取输入的数据

    java inputstream读取文件_java如何获取输入的数据InputStream读取流有三个方法,分别为read(),read(byte[] b),read(byte[] b,int off,int len)。其中read()方法是一次读取一个字节,鬼都知道效率是非常低的。所以最好是使用后面两个方法。 /** *读取流 * *@paraminStream *@return字节数组 *@throwsExcepti

    2022年9月21日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号