持久化

BZOJ 3166 HEOI2013 ALO 可持久化trie+st表

怎甘沉沦 提交于 2019-11-28 07:08:34
题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=3166(洛谷上也有) 题意概述:   给出一个序列,对于一个区间,其权值为区间中的次大值亦或区间中任意一个数的结果的最大值。求区间权值的最大值。 分析:   考虑每个点作为区间次大的状态,发现对于每个点至多有两个最长区间其为次大值(为了让异或结果最大当然是区间越长越好,选择最多),用二分+静态RMQ算出这两个区间再在可持久化trie上面贪心即可。   论如何现场yy可持久化数据结构23333(基于可持久化线段树的yy算法)   注意一下算区间的边界问题。 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<cstdlib> 5 #include<algorithm> 6 #include<cmath> 7 #include<queue> 8 #include<set> 9 #include<map> 10 #include<vector> 11 #include<cctype> 12 using namespace std; 13 const int MAXN=50005; 14 15 int N,a[MAXN]; 16 struct data{ int l,r,v; }q[MAXN<

【可持久化Trie】【set】bzoj3166 [Heoi2013]Alo

徘徊边缘 提交于 2019-11-28 07:08:16
枚举每个数,计算以其为次大数的 最大 区间,显然,只需要用这个区间的答案 对 答案进行更新即可。 找到每个数右侧、左侧第1、2个比它大的数,然后分类讨论一下即可。 找到的过程中把数sort以后,从大到小把它们的位置插入set,稍微维护一下即可。 #include<cstdio> #include<algorithm> #include<set> using namespace std; #define N 50001 #define MAXBIT 30 set<int>T; typedef set<int>::iterator ER; int root[N],ch[N*(MAXBIT+1)][2],sz[N*(MAXBIT+1)],tot; int query(int L,int R,int W)//询问a[L...R]中W与其的最大异或值 { int ans=0; L=root[L-1];R=root[R]; for(int i=MAXBIT-1;i>=0;--i) { int Bit=(W>>i&1^1); if(sz[ch[R][Bit]]-sz[ch[L][Bit]]==0) Bit^=1; else ans+=1<<i; R=ch[R][Bit]; L=ch[L][Bit]; } return ans; } void add(int now,int W)//先add(0

[BZOJ3166][Heoi2013]Alo 可持久化Trie树

大城市里の小女人 提交于 2019-11-28 07:08:02
3166: [Heoi2013]Alo Time Limit: 20 Sec Memory Limit: 256 MB Description Welcome to ALO ( Arithmetic and Logistic Online)。这是一个VR MMORPG , 如名字所见,到处充满了数学的谜题。 现在你拥有n颗宝石,每颗宝石有一个能量密度,记为ai,这些宝石的能量 密度两两不同。现在你可以选取连续的一些宝石(必须多于一个)进行融合,设为 ai, ai+1, …, a j,则融合而成的宝石的能量密度为这些宝石中能量密度的次大值 与其他任意一颗宝石的能量密度按位异或的值,即,设该段宝石能量密度次大值 为k,则生成的宝石的能量密度为max{k xor ap | ap ≠ k , i ≤ p ≤ j}。 现在你需要知道你怎么选取需要融合的宝石,才能使生成的宝石能量密度最大。 Input 第一行,一个整数 n,表示宝石个数。 第二行, n个整数,分别表示a1至an,表示每颗宝石的能量密度,保证对于i ≠ j有 ai ≠ aj。 Output 输出一行一个整数,表示最大能生成的宝石能量密度。 Sample Input 5 9 2 1 4 7 Sample Output 14 HINT 【样例解释】 选择区间[1,5],最大值为 7 xor 9。 对于 100%的数据有 1 ≤ n

BZOJ 3166 [HEOI2013]Alo (可持久化01Trie+链表)

南楼画角 提交于 2019-11-28 07:07:25
题目大意:给你一个长度为$n$的序列,让你找出一段子序列,求其中的 次大值 异或 序列里一个数 能得到的最大值 先对序列建出可持久化$Trie$ 按元素的值从小到大遍历,设当前元素的位置是i,找出它左右离它最近第一个比$a_{i}$的位置$l1,r1$,再找出第二个比$a_{i}$大的位置$l2,r2$,这个可以用双向链表维护,保证$l1$和$r1$是$i$在链表里的$L_{i},R_{i}$ 那么$a_{i}$能作为次大值出现的区间为$[l2+1,r1-1]$和$[l1+1,r2-1]$ 把$a_{i}$放到可持久化$Trie$里,找出和上述区间内的数异或能得到的最大值 然后把$a_{i}$从链表内删除,因为$a_{i}$不会作为最大值影响后面的元素 1 #include <cmath> 2 #include <queue> 3 #include <vector> 4 #include <cstdio> 5 #include <cstring> 6 #include <algorithm> 7 #define N1 50100 8 #define N2 1600000 9 #define MM 100 10 #define ll long long 11 #define dd double 12 #define uint unsigned int 13 #define mod

bzoj 3166 [Heoi2013]Alo 可持久化Trie

筅森魡賤 提交于 2019-11-28 07:07:16
3166: [Heoi2013]Alo Time Limit: 20 Sec Memory Limit: 256 MB Submit: 1227 Solved: 569 [ Submit ][ Status ][ Discuss ] Description Welcome to ALO ( Arithmetic and Logistic Online)。这是一个VR MMORPG , 如名字所见,到处充满了数学的谜题。 现在你拥有n颗宝石,每颗宝石有一个能量密度,记为ai,这些宝石的能量 密度两两不同。现在你可以选取连续的一些宝石(必须多于一个)进行融合,设为 ai, ai+1, …, a j,则融合而成的宝石的能量密度为这些宝石中能量密度的次大值 与其他任意一颗宝石的能量密度按位异或的值,即,设该段宝石能量密度次大值 为k,则生成的宝石的能量密度为max{k xor ap | ap ≠ k , i ≤ p ≤ j}。 现在你需要知道你怎么选取需要融合的宝石,才能使生成的宝石能量密度最大。 Input 第一行,一个整数 n,表示宝石个数。 第二行, n个整数,分别表示a1至an,表示每颗宝石的能量密度,保证对于i ≠ j有 ai ≠ aj。 Output 输出一行一个整数,表示最大能生成的宝石能量密度。 Sample Input 5 9 2 1 4 7 Sample Output

BZOJ 3261 最大异或和(可持久化Trie)

我的未来我决定 提交于 2019-11-28 04:44:22
Description 给定一个非负整数序列{a},初始长度为N。 有M个操作,有以下两种操作类型: 1、Ax:添加操作,表示在序列末尾添加一个数x,序列的长度N+1。 2、Qlrx:询问操作,你需要找到一个位置p,满足l<=p<=r,使得: a[p] xor a[p+1] xor ... xor a[N] xor x 最大,输出最大是多少。 Input 第一行包含两个整数 N ,M,含义如问题描述所示。 第二行包含 N个非负整数,表示初始的序列 A 。 接下来 M行,每行描述一个操作,格式如题面所述。 Output 假设询问操作有 T个,则输出应该有 T行,每行一个整数表示询问的答案。 Sample Input 5 5 2 6 4 3 6 A 1 Q 3 5 4 A 4 Q 5 7 0 Q 3 6 6 对于测试点 1-2,N,M<=5 。 对于测试点 3-7,N,M<=80000 。 对于测试点 8-10,N,M<=300000 。 其中测试点 1, 3, 5, 7, 9保证没有修改操作。 0<=a[i]<=10^7。 Sample Output 4 5 6 解题思路:   假如说就问你一个数在一群数中的最大异或,你就想到了01字典树 (详见HDU4825) 那要是这道题不就是把一个序列的后缀异或和做为一个数,问你区间最大异或 最大异或好办,就是在字典树上贪心查找,而区间异或

bzoj 3261: 最大异或和 可持久化Trie

為{幸葍}努か 提交于 2019-11-28 04:44:08
题目大意: http://www.lydsy.com/JudgeOnline/problem.php?id=3261 题解 首先我们转化一下,设sum[x]表示1~x的异或和 这样我们知道原来的询问转化为 在[l-1,r-1]内选择一个值,设为y 最大化y^sum[n]^x,其中sum[n]^x是一开始的给定值 那么问题就转化成了在一个区间内求一个数和已知数异或最大 所以我们直接裸上Trie树可以搞定 但是对于这个东西是要查一个区间内的,所以我们可持久化一下就好了 #include <queue> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; typedef long long ll; inline void read(int &x){ x=0;char ch;bool flag = false; while(ch=getchar(),ch<'!');if(ch == '-') ch=getchar(),flag = true; while(x=10*x+ch-'0',ch=getchar(),ch>'!');if(flag) x=-x; } const int maxn = 600010; struct Node{ Node *ch[2]; int ed; }*null

2--Master主备切换机制原理剖析与源码分析

两盒软妹~` 提交于 2019-11-27 22:39:47
原理剖析 Master实际上可以配置两个(防止单点故障),那么Spark原生的standalone模式是支持Master主备切换的。也就是说,当Active Master节点挂掉时,可以将StandBy master节点切换为Active Master。 Spark Master主备切换可以基于两种机制,一种是基于文件系统的,一种是基于Zookeeper的。基于文件系统的主备切换机制,需要在Active Master挂掉之后,由我们手动切换到StandBy Master上;而基于Zookeeper的主备切换机制,可以自动实现切换Master。 所以这里说的主备切换机制,实际上指的是在Active Master挂掉之后,切换到StandBy Master时,Master会执行的操作。 流程说明: Standby Master模式 1. 使用持久化引擎读取持久化的storeApps、storeDrivers、storeWorkers,持久化引擎有FileSystemPersistenceEngine和ZookeeperPersistenceEngine 2. 判读如果storedApps、storedDrivers、store的Workers有任何一个非空就继续向后执行. 3. 持久化引擎的Application、Driver

2--Master主备切换机制原理剖析与源码分析

浪尽此生 提交于 2019-11-27 22:19:30
原理剖析 Master实际上可以配置两个(防止单点故障),那么Spark原生的standalone模式是支持Master主备切换的。也就是说,当Active Master节点挂掉时,可以将StandBy master节点切换为Active Master。 Spark Master主备切换可以基于两种机制,一种是基于文件系统的,一种是基于Zookeeper的。基于文件系统的主备切换机制,需要在Active Master挂掉之后,由我们手动切换到StandBy Master上;而基于Zookeeper的主备切换机制,可以自动实现切换Master。 所以这里说的主备切换机制,实际上指的是在Active Master挂掉之后,切换到StandBy Master时,Master会执行的操作。 流程说明: Standby Master模式 1. 使用持久化引擎读取持久化的storeApps、storeDrivers、storeWorkers,持久化引擎有FileSystemPersistenceEngine和ZookeeperPersistenceEngine 2. 判读如果storedApps、storedDrivers、store的Workers有任何一个非空就继续向后执行. 3. 持久化引擎的Application、Driver

2--Master主备切换机制原理剖析与源码分析

为君一笑 提交于 2019-11-27 21:58:10
原理剖析 Master实际上可以配置两个(防止单点故障),那么Spark原生的standalone模式是支持Master主备切换的。也就是说,当Active Master节点挂掉时,可以将StandBy master节点切换为Active Master。 Spark Master主备切换可以基于两种机制,一种是基于文件系统的,一种是基于Zookeeper的。基于文件系统的主备切换机制,需要在Active Master挂掉之后,由我们手动切换到StandBy Master上;而基于Zookeeper的主备切换机制,可以自动实现切换Master。 所以这里说的主备切换机制,实际上指的是在Active Master挂掉之后,切换到StandBy Master时,Master会执行的操作。 流程说明: Standby Master模式 1. 使用持久化引擎读取持久化的storeApps、storeDrivers、storeWorkers,持久化引擎有FileSystemPersistenceEngine和ZookeeperPersistenceEngine 2. 判读如果storedApps、storedDrivers、store的Workers有任何一个非空就继续向后执行. 3. 持久化引擎的Application、Driver