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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • BoostNote使用,没有说明

    BoostNote使用,没有说明Thisisatitle斜体Thisisalsoatitle二级标题aaasddw第三极symbol标记代码块ThisisaCodesetThisisaCodesetfor(inti=0;i&amp;lt;5;i++){cout&amp;lt;&amp;lt;&quot;Hel

    2025年6月19日
    3
  • ManagementClass,ManagementObject 的使用[通俗易懂]

    ManagementClass,ManagementObject 的使用[通俗易懂]网上代码和MSDN帮助中都没有列出 ManagementObject[“”]这里到底有哪些属性可以使用,参考了http://www.groupsrv.com/dotnet/about69957.html了之后发现了可以枚举出来所有属性,代码如函数getallprop()。函数useprop中描述了如何获取以激活的网卡的IP地址和它的驱动程序名称,如果大伙需要其他的网卡其他属性,就到getal

    2022年10月2日
    6
  • python——pkl文件

    python——pkl文件pkl文件是python里面保存文件的一种格式,如果直接打开会显示一堆序列化的东西。cPickle在python3中更名为pickle使用方式如下:importpickleaspshoplistfile=’shoplist.data’#保存文件数据所在文件的文件名shoplist=[‘apple’,’mango’,’carrot’]f=open(shoplistfile,’wb’)#二进制打开,如果找不到该文件,则创建一个p.dump(shoplist,f)

    2025年10月9日
    6
  • js中数组求和_多个数组对应项求和

    js中数组求和_多个数组对应项求和js数组求和的5种方法题目描述计算给定数组arr中所有元素的总和输入描述:数组中的元素均为Number类型输入例子:sum([1,2,3,4])输出例子:101、不考虑算法复杂度,用递归做:functionsum(arr){varlen=arr.length;if(len==0){return0;}elseif(len==1){returnarr[0

    2022年9月25日
    2
  • css基础选择器有哪些

    css基础选择器有哪些css基础选择器有哪些(熟记)一、选择器作用:规范了页面中哪些元素能够定义好样式,同时也能帮助我们去二、选择器分类1.通用选择器(只能放在样式表)1.作用:匹配页面上的所有元素 2.语法:* 3.*{ 属性:属性值; }2.元素择器1.作用:匹配页面上某个元素的样式2.语法: 3.元素名{ 属性:属性…

    2025年5月24日
    4
  • rider 激活码【2021.10最新】

    (rider 激活码)最近有小伙伴私信我,问我这边有没有免费的intellijIdea的激活码,然后我将全栈君台教程分享给他了。激活成功之后他一直表示感谢,哈哈~https://javaforall.net/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~23LN…

    2022年3月29日
    73

发表回复

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

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