首页
Python
Java
IOS
Andorid
NodeJS
JavaScript
HTML5
XJOI 异或最大 01trie
2024-09-02
11.5NOIP2018提高组模拟题
书信(letter) Description 有 n 个小朋友, 编号为 1 到 n, 他们每人写了一封信, 放到了一个信箱里, 接下来每个人从中抽取一封书信. 显然, 这样一共有 n!种拿到书信的情况. 现在亮亮规定, 对任意的 1<=x,y<=n, 如果 x 号小朋友拿到 u 号小朋友写的 书信, y 号小朋友拿到 v 号小朋友写的书信, 那么(x+y)号小朋友必须拿到(u+v) 号小朋友写的书信(这里的加法若和超过了 n, 那么就减去 n) . 小林想知道, 总共有多少种拿到书信的情况呢
[十二省联考2019]异或粽子 01trie
[十二省联考2019]异或粽子 01trie 链接 luogu 思路 首先求前k大的(xo[i]^xo[j])(i<j). 考场上只想到01trie,不怎么会写可持久,就写了n个01trie,和直接sort一样.. 咳咳,官方题解是. 一个堆维护i为终点,可以取得位置为\([L,R]\)的最大值为val. 每次选最大的,然后将这个点分裂成两个: i为终点,可以取得位置为\([L,x-1]\)的最大值为\(val_1\). i为终点,可以取得位置为\([x+1,R]\)的最大值为\(val_2\)
CSU1216: 异或最大值(01Trie树)
Description 给定一些数,求这些数中两个数的异或值最大的那个值 Input 多组数据.第一行为数字个数n,1 <= n <= 10 ^ 5.接下来n行每行一个32位有符号非负整数. Output 任意两数最大异或值 Sample Input 3 3 7 9 Sample Output 14 Hint Source CSGrandeur的数据结构习题 毒瘤老师给学弟们出这种题真的好么qwq. 难不成想让他们现场构造01trie这种数据结构?雾 #include<cstdio>
Luogu P4551 最长异或路径 01trie
做一个树上前缀异或和,然后把前缀和插到$01trie$里,然后再对每一个前缀异或和整个查一遍,在树上从高位向低位贪心,按位优先选择不同的,就能贪出最大的答案. #include<cstdio> #include<iostream> #include<algorithm> #include<cstring> #include<cmath> #include<cctype> #include<cstdlib> #include
「洛谷5283」「LOJ3048」「十二省联考2019」异或粽子【可持久化01trie+优先队列】
题目链接 [洛谷传送门] [LOJ传送门] 题目大意 让你求区间异或和前\(k\)大的异或和的和. 正解 这道题目是Blue sky大佬教我做的(祝贺bluesky大佬进HA省A队) 我们做过某一些题目,非常的相似.[超级钢琴]还有[最小函数值]还有[最大异或和] 感觉这一些题目拼在一起就变成了这一道水题. 首先我们需要预处理出,所有区间的异或最大值. 这个东西可以用可持久化\(01trie\)实现,那么我们思考一下如何实现查询第\(k\)大的值的操作. 以下是关于01字典树中查询第k大的操作的
⌈洛谷4735⌋⌈BZOJ3261⌋最大异或和【可持久化01Trie】
题目链接 [BZOJ传送门] [洛谷传送门] 题解 终于学会了可持久化trie树了.感觉并不是特别的难. 因为可持久化,那么我们就考虑动态开点的trie树. 都知道异或操作是有传递性的,那么我们就维护一个前缀异或和. [最长异或距离] 可以参考以上这一道题目的贪心策略. 每次找到另外一边的(说的清楚一点就是每一次找字典树的儿子都找异或的数当前这一位的异或1的值),这样可以保证疑惑后答案最大. 参照主席树的区间最小的求法:[洛谷的模板] 每一次我们就查找root[l - 1] ~ root[r]区
2018.10.26 洛谷P4551 最长异或路径(01trie)
传送门 直接把每个点到根节点的异或距离插入01trie. 然后枚举每个点在01trie上匹配来更新答案就行了. 代码: #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; inline int read(){ int ans=0; char ch=getchar(); while(!isdigit(ch))ch=getch
P5283 [十二省联考2019]异或粽子 可持久化01Trie+线段树
$ \color{#0066ff}{ 题目描述 }$ 小粽是一个喜欢吃粽子的好孩子.今天她在家里自己做起了粽子. 小粽面前有 \(n\) 种互不相同的粽子馅儿,小粽将它们摆放为了一排,并从左至右编号为 \(1\) 到 \(n\).第 \(i\) 种馅儿具有一个非负整数的属性值 \(a_i\).每种馅儿的数量都足够多,即小粽不会因为缺少原料而做不出想要的粽子.小粽准备用这些馅儿来做出 \(k\) 个粽子. 小粽的做法是:选两个整数数 \(l\), \(r\),满足 \(1 \leqslant l
BZOJ 3261: 最大异或和位置-贪心+可持久化01Trie树
3261: 最大异或和 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 3519 Solved: 1493[Submit][Status][Discuss] Description 给定一个非负整数序列{a},初始长度为N. 有M个操作,有以下两种操作类型: 1.Ax:添加操作,表示在序列末尾添加一个数x,序列的长度N+1. 2.Qlrx:询问操作,你需要找到一个位置p,满足l<=p<=r,使得: a[p] xor a[p+1] xor ...
51nod 1295 XOR key-区间异或最大值-可持久化01Trie树(模板)
1295 XOR key 2 秒 262,144 KB 160 分 6 级题 给出一个长度为N的正整数数组A,再给出Q个查询,每个查询包括3个数,L, R, X (L <= R).求A[L] 至 A[R] 这R - L + 1个数中,与X 进行异或运算(Xor),得到的最大值是多少? 收起 输入 第1行:2个数N, Q中间用空格分隔,分别表示数组的长度及查询的数量(1 <= N <= 50000, 1 <= Q <= 50000). 第2 - N+1行:每行1个数,对
01Trie【p4551(poj3764)】 最长异或路径
题目描述 给定一棵 n 个点的带权树,结点下标从 1 开始到 N .寻找树中找两个结点,求最长的异或路径. 异或路径指的是指两个结点之间唯一路径上的所有边权的异或. 个人: 首先强推一下01字典树(Trie),这个东西是解决xor问题的利器. 查找最大异或值的时候我们一般从最高位到低位向下找 eg: 1000(2)=8(10) 0111(2)=7(10) 显然只要我的最高位是1,除非你和我的最高位相同,要不然我就是比你大. 根据数学上的等比数列求和可知 8=2^3 ,7=2^3-1 所以说我们可
可持久化01Trie树+LCA【p4592】[TJOI2018]异或
Description 现在有一颗以\(1\)为根节点的由\(n\)个节点组成的树,树上每个节点上都有一个权值\(v_i\).现在有\(Q\)次操作,操作如下: 1\(\;x\;y\):查询节点\(x\)的子树中与\(y\)异或结果的最大值 2\(\;x\;y\;z\):查询路径\(x\)到\(y\)上点与\(z\)异或结果最大值 Input 第一行是两个数字\(n,Q\); 第二行是\(n\)个数字用空格隔开,第\(i\)个数字\(v_i\)表示点\(i\)上的权值 接下来\(n-1\)行,每
可持久化01Trie树【p4735(bzoj3261)】最大异或和
Description 给定一个非负整数序列\(\{a\}\),初始长度为\(N\). 有\(M\)个操作,有以下两种操作类型: A x:添加操作,表示在序列末尾添加一个数\(x\),序列的长度\(N+1\). Q l r x:询问操作,你需要找到一个位置\(p\),满足\(l \leq p \leq r\),使得: \(a[p] \oplus a[p+1] \oplus ... \oplus a[N] \oplus x\) 最大,输出最大是多少. Input 第一行包含两个整数 \(N,M\)
【BZOJ 4103】 [Thu Summer Camp 2015]异或运算 可持久化01Trie
我们观察数据:树套树 PASS 主席树 PASS 一层一个Trie PASS 再看,异或!我们就把目光暂时定在01Tire然后我们发现,我们可以带着一堆点在01Trie上行走,因为O(n*q*30+m*30)是一个可选复杂度. 我们想一下我们正常的时候的01Trie其实是通过在每一层比较大小来确定这一为是0还是1,所以我们从上到下一位一位地走,统计每在这一位异或值为1的数的个数,如果这一位是一的个数大于k那么我们就使这一位为1,那么我们就舍弃这一位为0的状态就是所有的点都走变为1的路,如
BZOJ 4103 [Thusc 2015]异或运算 (可持久化01Trie+二分)
题目大意:给你一个长方形矩阵,位置$i,j$上的数是$a_{i}\;xor\;b_{j}$,求某个子矩阵内第$K$大的值 最先想的是二分答案然后验证,然而是$O(qnlogmloga_{i})$,不出意外会被卡..看完题解才恍然大悟 $01Trie$是具有二分性质的!因为每个节点最多有2个儿子! 先对$b$序列建可持久化$01Trie$,记录一个$sum$表示当前节点的子树内有多少个数 对于每次询问,因为$n$很小,暴力枚举$a$进行统计,记录每个a当前在01Trie的位置 接下来就是在$01T
BZOJ 3689 异或之 (可持久化01Trie+堆)
题目大意:给你一个序列,求出第$K$大的两两异或值 先建出来可持久化$01Trie$ 用一个$set$/堆存结构体,存某个异或对$<i,j>$的第二关键字$j$,以及$ai\;xor\;aj$的值,堆中按异或值从小到大排序 每次取出一对$<i,j>$并把它从堆中删除 在$[0,j-1]$的 可持久化$01Trie$ 中把$a_{i}$这个数删除 再查询$[0,j-1]$中和$a_{j}$的异或最大值,重新推入堆中... 反复操作$K$次即可 删除操作中的细节比较多 #include
BZOJ 3261 最大异或和 (可持久化01Trie)
题目大意:让你维护一个序列,支持在序列末插入一个数,支持询问$[l,r]$区间内选择一个位置$p$,使$xor\sum_{i=p}^{n}a_{i}$最大 可持久化$01Trie$裸题,把 区间异或和 转化为区间端点前缀异或和的异或值 即求$xsum_{n}\;xor\;max(xsum_{i})i\in[l-1,r-1]$的最大值 那么在可持久化$01Trie$里是$r-1$的$Trie$对$l-2$的$Trie$做差 需要先把$0$推入$Trie$里 #include <cmath> #i
洛谷P4592 [TJOI2018]异或(可持久化01Trie)
题意 题目链接 可持久化01Trie板子题 对于两个操作分别开就行了 #include<bits/stdc++.h> using namespace std; const int MAXN = 4e5 + 10, SS = MAXN * 42 + 10; const int B = 31; inline int read() { char c = getchar(); int x = 0, f = 1; while(c < '0' || c > '9') {if(c == '-')
01Trie树【p2420】 让我们异或吧
Description 异或是一种神奇的运算,大部分人把它总结成不进位加法. 在生活中-xor运算也很常见.比如,对于一个问题的回答,是为1,否为0.那么: (A是否是男生 )xor( B是否是男生)=A和B是否能够成为情侣 好了,现在我们来制造和处理一些复杂的情况.比如我们将给出一颗树,它很高兴自己有N个结点.树的每条边上有一个权值.我们要进行M次询问,对于每次询问,我们想知道某两点之间的路径上所有边权的异或值. Input 输入文件第一行包含一个整数N,表示这颗开心的树拥有的结点数,以下有N
Trie树 & 01Trie
指针版 #define MAXNUM 26 //定义字典树结构体 typedef struct Trie { bool flag;//从根到此是否为一个单词 Trie *next[MAXNUM]; }Trie; //声明一个根 Trie *root; //初始化该根 void init() { root = (Trie *)malloc(sizeof(Trie)); root->flag=false; ;i<MAXNUM;i++) root->next[i]=NULL; } //对该字典
[十二省联考2019]D1T1异或粽子
嘟嘟嘟 做这题之前,强烈推荐先把这道题切了P1631序列合并. 这两道题思路基本一模一样. 首先把异或处理成前缀异或,然后维护一个大根堆,每一次取出堆顶加到答案里面,然后把堆顶所在元素的次大的异或值放进堆里.这样循环\(k\)次,就是答案. 关键在于对于数\(sum[i]\),怎么找异或第几大.众人皆知是建01trie,然后在trie上像平衡树找第\(k\)大一样二分就可以了.因为对于每一个\(i\),查找的范围是\(0\) ~ \(i - 1\),建\(n\)棵trie树当然不行,所以我们要建
热门专题
uni-grid 点击的下标改变颜色
网址如何批量设置超链接
ScheduledThreadPoolExecutor 面试
oracle 失效供应商银行账户api
sqlserver 2012 可疑
基于gtid的主从复制 配置
linux下启动sqlplus
wpf button 圆角
winform webBrowser 设置 agent
SpriteKit 大飞机
VC修改文件访问时间
SQL2005 备份数据自动删除
win 10 ubuntu 18.04 lts删除用户
stm32 dma中断一次
python输出随机森林模型参数
vue如何实现子系统之间可配置
python开发后台网页
表格只能显示出来104w数据
python方向控制代码是什么
Linux迁移系统盘