正解:线段树+$trie$树 解题报告: 传送门$QwQ$ $umm$题目有点儿长我先写下题目大意趴$QwQ$,就说有$n$个初始均为空的集合和$m$次操作,每次操作为向某个集合内加入一个数$x$,或者查询最近的$d$次向编号在$[l,r]$内的集合加入的元素中,与$x$异或和的最大值 首先看到异或就想到$trie$树昂$QwQ$ 然后就还有一个时间限制和一个位置限制. 先考虑时间限制趴?就魔改下$trie$树,本来每个节点记录的是是否存在这个节点?现在变成这个节点最近一次被更新的时间,这样就能…
[题解]P4585 [FJOI2015]火星商店问题(线段树套Trie树) 语文没学好不要写省选题面!!!! 题目大意: 有\(n\)个集合,每个集合有个任意时刻都可用的初始元素.现在有\(m\)个操作 询问\([l,r]\)的集合中,使得\(v\oplus x\)最大的那个元素,输出\(v\oplus x\).同时要求这个\(x\)是最近\(d\)次插入中插入的. 在集合\(i\)中插入一个数\(x\). 考虑这样一个做法,直接开一颗线段树,线段树每个节点是一个\(trie\)树(不用可持久化…
P4585 [FJOI2015]火星商店问题 题目描述 火星上的一条商业街里按照商店的编号\(1,2,\dots,n\) ,依次排列着\(n\)个商店.商店里出售的琳琅满目的商品中,每种商品都用一个非负整数\(val\)来标价.每个商店每天都有可能进一些新商品,其标价可能与已有商品相同. 火星人在这条商业街购物时,通常会逛这条商业街某一段路上的所有商店,譬如说商店编号在区间\([L,R]\)中的商店,从中挑选\(1\)件自己最喜欢的商品.每个火星人对商品的喜好标准各不相同.通常每个火星人都有一个…
Description 火星上的一条商业街里按照商店的编号 \(1\),\(2\) ,-,\(n\) ,依次排列着 \(n\) 个商店.商店里出售的琳琅满目的商品中,每种商品都用一个非负整数 \(val\) 来标价.每个商店每天都有可能进一些新商品,其标价可能与已有商品相同. 火星人在这条商业街购物时,通常会逛这条商业街某一段路上的所有商店,譬如说商店编号在区间 \([L,R]\) 中的商店,从中挑选1件自己最喜欢的商品.每个火星人对商品的喜好标准各不相同.通常每个火星人都有一个自己的喜好密码…
(勿看,仅作笔记) bzoj权限题... https://www.luogu.org/problemnew/show/P4585 对于特殊商品,直接可持久化trie处理一下即可 剩下的,想了一段时间cdq,但是没想出来...应该是不行的 事实上,如果询问的不是最大值,而是一些满足[l,r]的答案等于[1,r]的答案-[1,l-1]的答案的东西,那么的确可以每个询问拆成两个直接cdq... 但是这题就不能..不过可以线段树分治,这是基于[l,r]的答案可以被分成多个线段树上区间(这些区间的并等于[…
[FJOI2015]火星商店问题 前天考了到线段树分治模板题,全场都切了,就我不会QAQ 于是切题无数的Tyher巨巨就告诉我:"你可以去看看火星商店问题,看了你就会了." 第一道线段树分治题,看了yyb博客,学习了一波. 其实线段树分治就是对操作的时间分治. 对线段树每个节点开一个\(vector\),把询问的区间(时间的区间)看成一段一段放到线段树的\(vector\)里面存着. 注意到修改会延续到最后一刻,所以修改只是左端点不一样而已,相当于一个后缀. 把修改按照位置排序(这个时…
感觉这个线段树分治和整体二分几乎相同啊~ code: #include <bits/stdc++.h> #define MAX 100300 #define ll long long #define lson now<<1 #define rson now<<1|1 #define setIO(s) freopen(s".in","r",stdin) using namespace std; struct Buy {int s,v…
题解 题目太丧,OJ太没有良心,我永远喜欢LOJ! (TLE报成RE,垃圾洛谷,我永远喜欢LOJ) 好的,平复一下我debug了一上午崩溃的心态= =,写一写这道题的题解 把所有限制去掉,给出一个值,和一堆数种选一个异或起来求最大值,是一个经典的字典树问题,如果去掉了d的限制,我们类似主席树那样求一个可持久化字典树,利用前缀和就可以快速求得一个区间的字典树了,所以对于所有特殊商品,我们先用这些商品更新一下每一个询问 我们可以用线段树套可持久化trie树,然而空间很难办-- 那么我们转为对每个线段…
BZOJ 洛谷 一直觉得自己非常zz呢.现在看来是真的=-= 注意题意描述有点问题,可以看BZOJ/洛谷讨论. 每个询问有两个限制区间,一是时间限制\([t-d+1,t]\),二是物品限制\([L,R]\). 每个物品都是在一个时间点发生的(并不是区间,我竟然一直没想通= =).那么就可以按时间线段树分治了. 把每个询问按时间区间放到线段树对应节点上.那么在每个节点处,把时间点在该区间内的物品,按编号从小到大插入到可持久化\(Trie\)里,就可以解决这个节点上的询问了. 排序可以在最开始将物品…
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4137 关于可持久化01trie树:https://www.cnblogs.com/LadyLex/p/7281110.html 看了看它的两道例题,就没写. 特殊商品可以直接用可持久化trie做. 其他部分用线段树分治.修改是单点的,询问是区间,原来想的是把询问区间定位后有 mlogn 个,在线段树的每个叶子上贡献一番:结果TLE了,因为若是在叶子处贡献,一个询问就要做 r-l+1 次.…
颓文化课作业到很晚写篇博客清醒一下 首先我们仔细阅读并猜测了题意之后,就会想到一个暴力的线段树套可持久化0/1Trie的做法,但是它显然是过不去的 由于最近再做线段树分治的题,我们可以想到用线段树分治来解决这个问题 考虑对于每一次询问,我们都可以找出它连续询问的一段时间区间,然后把它扔进线段树的每个节点里 考虑怎么加点,如果暴力插入修改那就和暴力没什么区别了,我们还要考虑进一步优化 还是一个老套路,由于线段树分治是一种离线算法,因此插入修改的顺序完全可以由我们自己决定 那么再此利用分治的思想,每…
[BZOJ4137]火星商店问题(线段树分治,可持久化Trie) 题面 洛谷 BZOJ权限题 题解 显然可以树套树,外层线段树,内层可持久化Trie来做. 所以我们需要更加优美的做法.--线段树分治. 什么叫做线段树分治呢? 我们发现每次询问都是区间的形式,看到区间我们就可以想到线段数. 我们接着观察,发现了两个特点:询问是区间,加入新数是单点. 那么我们对于单点构建线段树,在本题中这个单点是按照时间顺序构建的. 所以每次询问在不考虑区间的情况下对应的时间是唯一的. 所以把每次询问暴力放到线段树…
[FJOI2015]火星商店问题 神仙线段树分治...不过我不会. 这题用线段树套可持久化Trie还是能写的. 常数有点大,洛谷垫底水平. // luogu-judger-enable-o2 #include<bits/stdc++.h> #define il inline #define vd void typedef long long ll; il int gi(){ int x=0,f=1; char ch=getchar(); while(ch<'0'||ch>'9'){…
[LG4585][FJOI2015]火星商店问题 题面 bzoj权限题 洛谷 \(Notice:\) 关于题面的几个比较坑的地方: "一天"不是一个操作,而是有0操作就相当于一天开始了,然后下面的紧跟着的1操作都算这一天的,直到再次出现0操作为止.当然第一个操作可能会是1操作这个时候也算第一天(比如样例--) 0操作是在这个位置添加一个数而不是改成这个数 d=0的时候不算这一天 垃圾题面,害我被坑 题解 \(xgzc\)说线段树分治要先开这题 但是我觉得他在放屁 \(\Leftarro…
点此看题面 大致题意: 有\(n\)家店,每个商品有一个标价.每天,都可能有某家商店进货,也可能有某人去购物.一个人在购物时,会于编号在区间\([L_i,R_i]\)的商店里挑选一件进货\(d_i\)天以内的商品使得其标价与\(x_i\)的异或值最大,同时每家店有一个特殊商品在任何时候都可以选择.对于每名购物者求出这个最大异或值. 暴力 一个很暴力的想法,就是线段树套可持久化\(Trie\)树...... 但这貌似是过不了的,因此需要优化. 线段树分治 这道题的正解是一个叫做线段树分治的神奇算法…
https://www.lydsy.com/JudgeOnline/problem.php?id=4137 https://www.luogu.org/problemnew/show/P4585 火星上的一条商业街里按照商店的编号1,2 ,…,n ,依次排列着n个商店.商店里出售的琳琅满目的商品中,每种商品都用一个非负整数val来标价.每个商店每天都有可能进一些新商品,其标价可能与已有商品相同.  火星人在这条商业街购物时,通常会逛这条商业街某一段路上的所有商店,譬如说商店编号在区间[L,R]中…
传送门 题意:序列上有nnn个商店,有两种事件会发生: sss商店上进购标价为vvv的一个物品 求编号为[l,r][l,r][l,r]之间的位置买ddd天内新进购的所有物品与一个数xxx异或值的最大值. 每个位置都有一种物品每天会新进购(最开始会给出). 思路: 第一眼显然的线段树套可持久化01trie 恭喜MLE走人 然后发现每个人的询问可以放到按时间建出的线段树上,这个不就可以线段树分治离线处理了吗. 于是把每天进购的物品排个序下放,每一层线段树用一个可持久化01trie来统计答案即可(注意…
重新写一年前抄题解的那题,当时我啥都不会只是Ctrl+C,Ctrl+V写过的题,今天重新写一遍. 题解: 不会线段树分治,还是学一下这东西吧,这是我的第一道线段树分治. 首先对于特殊商品,可以直接可持久化Trie记录答案.首先考虑对每个线段树开一个vector,把询问的时间区间看成一段一段的塞到线段树里,修改实际上是相当于一个后缀.然后把修改按位置排序,然后仿照线段树的形式按时间分治,mid前的修改扔到左边数组里递归,反之扔到右边,这样能够排除这一维的限制.然后空间上用可持久化Trie,前缀和相…
正题 题目链接:https://www.luogu.com.cn/problem/P4585 题目大意 \(n\)个集合,开始每个集合中有一个数字. 开启新的一天并且往集合\(s\)中插入数字\(v\) 询问\(d\)天以内插入的数字(包括最开始的)中\(l\sim r\)集合内的数字异或上\(x\)的最大值. 所有数字均在\([0,10^5]\)范围内 解题思路 线段树上每个节点维护一个可持久化\(Trie\). 每次插入就把包含\(s\)的节点插入数字\(v\). 询问就正常查询即可. 时空…
https://www.luogu.org/problem/show?pid=3372 题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某区间每一个数加上x 2.求出某区间每一个数的和 输入输出格式 输入格式: 第一行包含两个整数N.M,分别表示该数列数字的个数和操作的总个数. 第二行包含N个用空格分隔的整数,其中第i个数字表示数列第i项的初始值. 接下来M行每行包含3或4个整数,表示一个操作,具体如下: 操作1: 格式:1 x y k 含义:将区间[x,y]内每个数加上k 操作2…
题目描述 火星上的一条商业街里按照商店的编号1,2 ,…,n ,依次排列着n个商店.商店里出售的琳琅满目的商品中,每种商品都用一个非负整数val来标价.每个商店每天都有可能进一些新商品,其标价可能与已有商品相同. 火星人在这条商业街购物时,通常会逛这条商业街某一段路上的所有商店,譬如说商店编号在区间[L,R]中的商店,从中挑选1件自己最喜欢的商品.每个火星人对商品的喜好标准各不相同.通常每个火星人都有一个自己的喜好密码x.对每种标价为val的商品,喜好密码为x的火星人对这种商品的喜好程度与val…
Description 火星上的一条商业街里按照商店的编号1,2 ,…,n ,依次排列着n个商店.商店里出售的琳琅满目的商品中,每种商品都用一个非负整数val来标价.每个商店每天都有可能进一些新商品,其标价可能与已有商品相同.  火星人在这条商业街购物时,通常会逛这条商业街某一段路上的所有商店,譬如说商店编号在区间[L,R]中的商店,从中挑选1件自己最喜欢的商品.每个火星人对商品的喜好标准各不相同.通常每个火星人都有一个自己的喜好密码x.对每种标价为val的商品,喜好密码为x的火星人对这种商品的…
*题目描述: 火星上的一条商业街里按照商店的编号1,2 ,…,n ,依次排列着n个商店.商店里出售的琳琅满目的商品中,每种商品都用一个非负整数val来标价.每个商店每天都有可能进一些新商品,其标价可能与已有商品相同. 火星人在这条商业街购物时,通常会逛这条商业街某一段路上的所有商店,譬如说商店编号在区间[L,R]中的商店,从中挑选1件自己最喜欢的商品.每个火星人对商品的喜好标准各不相同.通常每个火星人都有一个自己的喜好密码x.对每种标价为val的商品,喜好密码为x的火星人对这种商品的喜好程度与v…
洛谷题目传送门 \(O(n)\)的正解算法对我这个小蒟蒻真的还有点思维难度.洛谷题解里都讲得很好. 考试的时候一看到300000就直接去想各种带log的做法了,反正不怕T...... 我永远只会有最直观的思路(最差的程序效率) 题目相当于每次让我们找区间\([1,las-1]\)中上数第一个比当前盘子半径小的位置(las为上一次盘子掉到的位置)于是用线段树无脑搞一下,维护区间最小值,每次找这个位置,能往左跳就往左,不能的话再往右,当然如果超过了las-1就不用找了,直接放在las上面(相当于la…
LOJ 洛谷 最基本的思路同BZOJ2115 Xor,将图中所有环的异或和插入线性基,求一下线性基中数的异或最大值. 用bitset优化一下,暴力的复杂度是\(O(\frac{qmL^2}{w})\)的.(这就有\(70\)分?) 因为最开始的图是连通的,可以先求一个\(dis[i]\)表示\(1\)到\(i\)的异或和.每次加边会形成环,就是在线性基中插入一个元素. 因为有撤销,所以线段树分治就好了.线段树上每个节点开一个线性基.同一时刻只需要\(\log\)个线性基的空间. 复杂度\(O(\…
洛谷题目传送门 emm...题目名写了个平衡树,但是这道题的理论复杂度最优解应该还是树状数组套值域线段树吧. 就像dynamic ranking那样(蒟蒻的Sol,放一个link骗访问量233) 所有的值(包括初始a数组,操作1.3.4.5的k)全部先丢进去离散化 对于1操作查比它小的数,挑log棵线段树,找区间小于这个数的个数+1,这个还比较好像 操作2就是dynamic ranking,log棵线段树一起加减,像静态主席树求第k小一样跳,操作3 dynamic ranking里也有 操作4先…
题目链接: 洛谷 题目大意在描述底下有.此处不赘述. 明显是个类似于LIS的dp. 令 $dp[i][j]$ 表示: $j=1$ 时表示已经处理了 $i$ 个数,上一个选的数来自序列 $A[0]$ 的最长长度 $j=2$ 表示 $A[1]$ $j=3$ 表示 $A[2]$ 且是单调递减 $j=4$ 表示 $A[2]$ 且是单调递增 (为了方便,我们令 $seq[x]$ 表示当上文中的 $j=x$ 时表示哪个序列) 那么有转移方程: $dp[i][1]=\max\limits_{1\le j<i,…
[题目]#6396. 「THUPC2018」弗雷兹的玩具商店 / Toyshop [题意]给定一个长度为n的物品序列,每个物品有价值.不超过m的重量.要求支持以下三种操作:1.物品价值区间加减,2.物品重量区间加(超过m部分取模),3.区间物品求解容量为m的完全背包数组.\(n \leq 2*10^5,m \leq 60,Q \leq 3*10^4\). [算法]线段树+完全背包 显然,每个重量只需要保留价值最大的物品. 然后就很简单了,线段树每个维护一个数组c[x]表示重量x的最大价值,区间循…
洛谷P4145:https://www.luogu.org/problemnew/show/P4145 思路 这道题的重点在于sqrt(1)=1 一个限制条件 与正常线段树不同的是区间修改为开方 那么我们用一个数组记录每个区间的最大值 只有当这个区间的最大值大于1时才需要开方 因此 当我们更新到叶子节点时把每个区间的最大值和sum值开方即可 注意题目中说l可能大于r 要交换 代码 #include<iostream> #include<cmath> using namespace…
好几天之前做的题目了,一直想写一下博客也没腾出时间来,今天赶紧把坑给填上呼呼呼~ 这道题首先如果只考虑每个商店中没有时间限制的物品时,我们只需要使用一棵可持久化trie树来维护区间内的异或最大值即可,这样我们可以把两部分的问题分离开来. 之后我们再考虑有时间限制与编号限制的情况下,该怎样做?无脑做法线段树套trie,直接在对应的区间trie树上贪心,如果该条边的最后更新时间在允许的范围内,说明可以走这条边.虽然这样也可以卡过去(主要在于卡空间),但我们来介绍一种更加妙妙的线段树分治做法.其实我感…