首页
Python
Java
IOS
Andorid
NodeJS
JavaScript
HTML5
【
bzoj 4299 Codechef FRBSUM
】的更多相关文章
BZOJ.4299.Codechef FRBSUM(主席树)
题目链接 记mx为最大的满足1~mx都能组成的数. 考虑当前能构成1~v中的所有数,再加入一个数x,若x>v+1,则mx=v,x不会产生影响:否则x<=v+1,则新的mx=x+v. 对于区间[l,r]的询问,模拟这个过程.假设当前答案为v,查询[l,r]中值在[1,v+1]中的数的和sum,若sum==v,即不存在v+1,break:否则v加上这些v+1的和即v=sum,继续. 用主席树实现.v每次至少增加一倍(好像这么说不恰当,每次加的数至少是上一个数+1?),所以复杂度\(O(n\log…
bzoj 4299 Codechef FRBSUM
定义一个集合的神秘数为不能表示成这个集合的某个子集和的最小正整数,给一个数列,多次求区间神秘数 $n \leq 100000$ sol: 考虑这个神秘数的性质,可以发现,如果神秘数是 $x$,那么 $1 \sim x$ 的所有数都能凑出来 如果每次往集合中加入一个数,如果比 $x$ 大,则神秘数不变,如果比 $x$ 小,则神秘数至少 $+x$ 于是每次可以用值域主席树维护一下区间小于等于 $x$ 的所有数的和,然后对于每个区间,先把神秘数 $x$ 设为 $0$,每轮求小于等于 $x+1$ 的所有…
4299: Codechef FRBSUM
4299: Codechef FRBSUM https://www.lydsy.com/JudgeOnline/problem.php?id=4299 分析: 主席树. https://blog.sengxian.com/solutions/bzoj-4408 代码: #include<cstdio> #include<algorithm> #include<cstring> #include<cmath> #include<iostream>…
[BZOJ 3509] [CodeChef] COUNTARI (FFT+分块)
[BZOJ 3509] [CodeChef] COUNTARI (FFT+分块) 题面 给出一个长度为n的数组,问有多少三元组\((i,j,k)\)满足\(i<j<k,a_j-a_i=a_k-a_j\) \(n \leq 10^5, a_i \leq 30000\) 分析 记\(m=\max(a_i)\) 先做一点变形\(a_i+a_k=2a_j\).那么枚举j,把j左边的和右边的所有数字找出来,找出有哪些数字对的和为\(2a_j\). 维护当前块左边每个数的出现次数cntl,,和右边块的出现…
【Codechef FRBSUM】【FJOI2016】【BZOJ4299】【BZOJ 4408】 可持久化线段树
4408: [Fjoi 2016]神秘数 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 475 Solved: 287[Submit][Status][Discuss] Description 一个可重复数字集合S的神秘数定义为最小的不能被S的子集的和表示的正整数.例如S={1,1,1,4,13}, 1 = 1 2 = 1+1 3 = 1+1+1 4 = 4 5 = 4+1 6 = 4+1+1 7 = 4+1+1+1 8无法表示为集合S的子集的…
bzoj 4546: codechef XRQRS [可持久化Trie]
4546: codechef XRQRS 可持久化Trie codechef上过了,bzoj上蜜汁re,看别人说要开5.2e5才行. #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <cmath> using namespace std; typedef long long ll; const int N = 5.2e5+…
BZOJ 3221: [Codechef FEB13] Obserbing the tree树上询问( 可持久化线段树 + 树链剖分 )
树链剖分+可持久化线段树....这个一眼可以看出来, 因为可持久化所以写了标记永久化(否则就是区间修改的线段树的持久化..不会), 结果就写挂了, T得飞起...和管理员拿数据调后才发现= = 做法:码码码码码码码码...码完就AC啦. O(M log N) ------------------------------------------------------------------- #include<cstdio> #include<cctype> #include<…
BZOJ 3514: Codechef MARCH14 GERALD07加强版( LCT + 主席树 )
从左到右加边, 假如+的边e形成环, 那么记下这个环上最早加入的边_e, 当且仅当询问区间的左端点> _e加入的时间, e对答案有贡献(脑补一下). 然后一开始是N个连通块, 假如有x条边有贡献, 答案就是N-x. 用LCT维护加边, 可持久化线段树维护询问. O(NlogN) ------------------------------------------------------------------------------------ #include<cstdio> #inc…
BZOJ 4260: Codechef REBXOR( trie )
求出前缀和, 那么以第x个元素结尾的最大异或值是max(sumx^sump)(1≤p<x), 用trie加速. 后缀同理, 然后扫一遍就OK了.时间复杂度O(31N) ----------------------------------------------------------------------- #include<cstdio> #include<cstring> #include<algorithm> #include<cctype>…
bzoj 3509: [CodeChef] COUNTARI] [分块 生成函数]
3509: [CodeChef] COUNTARI 题意:统计满足\(i<j<k, 2*a[j] = a[i] + a[k]\)的个数 \(2*a[j]\)不太好处理,暴力fft不如直接暴力 考虑分块 每个块用生成函数统计j在块中ik在两边的块中的 有两个在块中或者三个都在暴力统计,实时维护两边权值出现次数 #include <iostream> #include <cstdio> #include <cstring> #include <algori…
BZOJ 3514: Codechef MARCH14 GERALD07加强版 [LCT 主席树 kruskal]
3514: Codechef MARCH14 GERALD07加强版 Time Limit: 60 Sec Memory Limit: 256 MBSubmit: 1312 Solved: 501[Submit][Status][Discuss] Description N个点M条边的无向图,询问保留图中编号在[l,r]的边的时候图中的联通块个数. Input 第一行四个整数N.M.K.type,代表点数.边数.询问数以及询问是否加密.接下来M行,代表图中的每条边.接下来K行,每行两个整数L…
bzoj 4260: Codechef REBXOR (01 Trie)
链接: https://www.lydsy.com/JudgeOnline/problem.php?id=4260 题面: 4260: Codechef REBXOR Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 2596 Solved: 1142[Submit][Status][Discuss] Description Input 输入数据的第一行包含一个整数N,表示数组中的元素个数. 第二行包含N个整数A1,A2,…,AN. Out…
[BZOJ 3514]Codechef MARCH14 GERALD07加强版 (CHEF AND GRAPH QUERIES)
[BZOJ3514] Codechef MARCH14 GERALD07加强版 (CHEF AND GRAPH QUERIES) 题意 \(N\) 个点 \(M\) 条边的无向图,\(K\) 次询问保留图中编号在 \([l,r]\) 的边的时候图中的联通块个数. 部分数据强制在线. \(1\le N,M,K\le200,000\) 题解 有点意思的LCT题. 原题好像不强制在线于是可以回滚莫队+带撤销并查集水过去. 我们考虑暴力: 把 \([l,r]\) 内的所有点依次加入并查集, 每次若成功合…
BZOJ 3509: [CodeChef] COUNTARI
3509: [CodeChef] COUNTARI Time Limit: 40 Sec Memory Limit: 128 MBSubmit: 883 Solved: 250[Submit][Status][Discuss] Description 给定一个长度为N的数组A[],求有多少对i, j, k(1<=i<j<k<=N)满足A[k]-A[j]=A[j]-A[i]. Input 第一行一个整数N(N<=10^5).接下来一行N个数A[i](A[i]<=300…
[BZOJ 3221][Codechef FEB13] Obserbing the tree树上询问
[BZOJ 3221]Obserbing the tree树上询问 题目 小N最近在做关于树的题.今天她想了这样一道题,给定一棵N个节点的树,节点按1~N编号,一开始每个节点上的权值都是0,接下来有M个操作.第一种操作是修改,给出4个整数X,Y,A,B,对于X到Y路径上加上一个首项是A,公差是B的等差数列,因为小N十分谨慎,所以她每做完一个修改操作就会保存一次,初始状态是第0次保存的局面.第二种操作是求和,给出2个整数X,Y,输出X到Y路径上所有节点的权值和.第三种操作是读取之前第X次保存的局面…
bzoj4408 [Fjoi 2016]神秘数 & bzoj4299 Codechef FRBSUM 主席树+二分+贪心
题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=4299 https://lydsy.com/JudgeOnline/problem.php?id=4408 (双倍经验) 题解 考虑如果直接给一个序列要求出它的神秘数应该怎么做. 对于第 \(i\) 个数,如果我们已经有了前 \(i-1\) 个数的神秘数 \(s\),那么也就是说 \([1, s - 1]\) 的正整数全部都是可以组成的. 如果 \(a_i \leq s\) 的话,那么 \([…
BZOJ4299 : Codechef FRBSUM
若$[0,i]$的数都可以得到,那么$[1,所有不大于i+1的数的和]$的数都可以得到. 如此暴力枚举答案,用可持久化线段树支持查询,因为每次数字至少翻一倍,所以复杂度为$O(m\log^2n)$. #include<cstdio> #include<algorithm> const int N=100010,M=1800000; int n,m,i,j,c,d,a[N],b[N],g[N],nxt[N],T[N],l[M],r[M],v[M],tot; inline void r…
BZOJ 3514 Codechef MARCH14 GERALD07加强版
题目链接:http://www.lydsy.com:808/JudgeOnline/problem.php?id=3514 题意:给出一个图m条边.每次询问只加入编号在区间[L,R]之内的边有多少连通块.在线. 思路:求出[1,i]边加入时的最大生成树,即加入在[1,i]中不在生成树上的边时连通块不变.假如是离线,那么我们按照询问右端点排序,每次维护区间[L,R]中在生成树上的边即可. 现在是在线,我们用可持久化线段树维护.直观想,每次加入一条边时连通块数减少1.但是加入边R时存在环的时候这个就…
BZOJ 4260 Codechef REBXOR
Description Input 输入数据的第一行包含一个整数N,表示数组中的元素个数. 第二行包含N个整数A1,A2,…,AN. Output 输出一行包含给定表达式可能的最大值. Sample Input 5 1 2 3 1 2 Sample Output 6 HINT 满足条件的(l1,r1,l2,r2)有:(1,2,3,3),(1,2,4,5),(3,3,4,5). 对于100%的数据,2 ≤ N ≤ 4*105,0 ≤ Ai ≤ 109. 因为异或满足前缀和性质 即s[i]^s[j-…
BZOJ 3514: Codechef MARCH14 GERALD07加强版(LCT + 主席树)
题意 \(N\) 个点 \(M\) 条边的无向图,询问保留图中编号在 \([l,r]\) 的边的时候图中的联通块个数. \(K\) 次询问强制在线. \(1\le N,M,K \le 200,000\) 题解 从前往后依次考虑每一条边,如果加入这条边 \(i\) 会生成环,那就删除这个环里最早加入的边 \(j\) ,并且记录下来 \(fout[i] = j\) ,代表 \(i\) 的加入弹掉了 \(j\) 号边 . 也就是说我们动态维护一颗以插入时间为权值的最大生成树,维护这个 \(MST\)…
BZOJ 4260 Codechef REBXOR (区间异或和最值) (01字典树+DP)
<题目链接> 题目大意:给定一个序列,现在求出两段不相交的区间异或和的最大值. 解题分析: 区间异或问题首先想到01字典树.利用前缀.后缀建树,并且利用异或的性质,相同的两个数异或变成0,从而将前缀操作转化为区间操作,比如:$(a_1 \oplus a_2)\oplus(a_1 \oplus a_2 \oplus a_3 \oplus a_4) = a_3 \oplus a_4$.然后利用简单的$dp$,$predp[i]$记录前$[1~i]$ 任意区间的区间异或最大值(注意不是前缀),$nx…
【刷题】BZOJ 3514 Codechef MARCH14 GERALD07加强版
Description N个点M条边的无向图,询问保留图中编号在[l,r]的边的时候图中的联通块个数. Input 第一行四个整数N.M.K.type,代表点数.边数.询问数以及询问是否加密. 接下来M行,代表图中的每条边. 接下来K行,每行两个整数L.R代表一组询问.对于type=0的测试点,读入的L和R即为询问的L.R:对于type=1的测试点,每组询问的L.R应为L xor lastans和R xor lastans. Output K行每行一个整数代表该组询问的联通块个数. Sample…
BZOJ4299 Codechef FRBSUM(主席树)
感觉非常不可做,于是考虑有什么奇怪的性质. 先考虑怎么求子集和mex.将数从小到大排序,假设已经凑出了0~n的所有数,如果下一个数>n+1显然mex就是n+1了,否则若其为x则可以凑出1~n+x所有数. 对于区间查询,建棵主席树即可,每次查询权值线段树上lastn+2~n+1的区间,用区间和更新n,如果这段区间没有数则mex为n+1.因为每次n的增量都是在lastn+2~n+1这一段的,所以每查询两次n会翻一倍以上,复杂度O(nlog2n). #include<iostream> #in…
BZOJ 4260 Codechef REBXOR(字典树)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=4260 [题目大意] 给出一个数列,请找出两段连续且不相交的数段,使得其分别异或和的和最大. [题解] 在字典树上进行贪心我们可以得到当前数与已经插入的数的最大异或值, 我们将插入值转为前缀和,即可得到固定区间右端点的区段异或最大值. 同理我们可以计算后缀和的字典树,得到固定区间左端的区段异或最大值, 枚举断点,用前缀最大值与后缀最大值的和更新答案即可. [代码] #include…
BZOJ 4260 Codechef REBXOR 01trie
好题...开阔思路 把每个前缀异或和依次插入$01trie$,插之前找一个最优的(就是从高位向低位贪心,尽量走相反方向)看看能不能更新答案,此时相当于找到了区间右端点不超过某个点$r$的最大或和$f[r]$.对于后缀也同理来一波上面的操作,然后就找到了区间左端点端点不少于某个点$l$的最大异或和.所以答案就是$max(f[某个位置]+query(下个位置开始的后缀))$. #include<cstdio> #include<iostream> #include<algorit…
BZOJ 3509 [CodeChef] COUNTARI ——分块 FFT
分块大法好. 块内暴力,块外FFT. 弃疗了,抄SX队长$silvernebula$的代码 #include <map> #include <cmath> #include <queue> #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std; #define F(i,j,k) fo…
BZOJ4299: Codechef FRBSUM(主席树)
题意 题目链接 数集S的ForbiddenSum定义为无法用S的某个子集(可以为空)的和表示的最小的非负整数. 例如,S={1,1,3,7},则它的子集和中包含0(S’=∅),1(S’={1}),2(S’={1,1}),3(S’={3}),4(S’={1,3}),5(S' = {1, 1, 3}),但是它无法得到6.因此S的ForbiddenSum为6. 给定一个序列A,你的任务是回答该数列的一些子区间所形成的数集的ForbiddenSum是多少. Sol 若序列已经被从小到大排序 考虑当前位置…
bzoj 4260 Codechef REBXOR——trie树
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4260 一段的异或和就是两个前缀的异或和.正反扫两边,用trie树算每个位置为左/右端点时最大异或和,并维护前/后缀max:然后枚举分界线即可. 注意&出来是值,要弄一弄才能变成bool. #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using…
BZOJ 3514 Codechef MARCH14 GERALD07加强版 Link-Cut-Tree+划分树
题目大意: 给定n个点m条边的无向图.求问当图中仅仅有[编号在[l,r]区间内]的边存在时图中的联通块个数 强制在线 注意联通块是指联通了就是同一块,不是Tarjan求的那种块 看到这题的那一刻我就想小便有木有0.0 这尼玛怎么做?可持久化并查集? 暴力? 分块乱搞? ... 后来看了HZWER大神的博客才知道这样的巧妙的算法0.0 太强大了 直接复制wulala的题解 讲得非常清楚 不累述了 wulala 葱娘说这是一个非常巧妙的题.. 有一个比較猎奇的做法:首先把边依次加到图中,若当前这条边…
(WC2016模拟十八)【BZOJ4299】[CodeChef]FRBSUM
咕了若干天我终于来补坑了qwq HINT $1\leq N,M\leq 10^5$ $1\leq \sum A_i\leq 10^9$ 题解: 虽然场上做出来了但还是觉得好神啊! 假设当前集合能凑出$[1,max]$这些数,此时再加入一个数$x$: 1.若$x<=max+1$,则必定能继续凑出$[max+1,max+x]$这些数,新的$max=max+x$: 2.若$x>max+1$,则$max+1$这个数必定凑不出来,也就会成为当前的forbiddennum. 那么开一颗主席树,每次查询求出…