zoukankan      html  css  js  c++  java
  • bzoj 3261: 最大异或和

    题意:

    给定一个非负整数序列 {a},初始长度为 N。       
    有   M个操作,有以下两种操作类型:
    1 、A x:添加操作,表示在序列末尾添加一个数 x,序列的长度 N+1。
    2 、Q l r x:询问操作,你需要找到一个位置 p,满足 l<=p<=r,使得:
    a[p] xor a[p+1] xor ... xor a[N] xor x 最大,输出最大是多少。

    n<=1e5,a[i]<=1e7

    题解:

    http://www.cnblogs.com/yinwuxiao/p/8025535.html

    和这题的思路基本一致,越前面的位对其影响越大,所以从前到后考虑

    其次,在查找的时候其实就类似于字符串的匹配,所以用trie树

    由于修改操作的出现,应考虑可持久化trie

    即与zkw线段树一样第一维维护前x个节点的前缀和,第二维维护字符串

    而每次查询时,只需查询两个前缀相减是否大于0,判断该字符串是否存在

    而修改时只需新建节点,在变动的整条链上++

    代码:

  • 相关阅读:
    初赛—算法复杂度
    2-SAT
    最小生成树
    18-短信验证码接口
    17-腾讯云短信开发
    16-手机号是否存在验证接口
    15-多方式登录
    14-登录注册页面
    13-Git
    12-跨域请求详解
  • 原文地址:https://www.cnblogs.com/yinwuxiao/p/8025695.html
Copyright © 2011-2022 走看看