题目描述 有一个陶瓷瓶周围有\(n\)个可以印花的位置.第\(i\)个与第\(i+1\)个位置之间的距离为\(d_i\),在第\(i\)个位置印图案要\(t_i\)秒. 机器刚开始在\(0\)号位置,可以以\(1\)单位长度每秒的速度移动. 一个位置只能印一个图案. 现在有\(m\)秒,问你最多能印几个图案. 保证时间不足以绕陶瓷瓶一圈. \(n\leq 100000\) 题解 肯定是先往一边移动在移动到另外一边. 不妨设先往右边移动,那么右边的距离就要\(\times 2\). 求出每边印\(…
BZOJ 洛谷 一直觉得自己非常zz呢.现在看来是真的=-= 注意题意描述有点问题,可以看BZOJ/洛谷讨论. 每个询问有两个限制区间,一是时间限制\([t-d+1,t]\),二是物品限制\([L,R]\). 每个物品都是在一个时间点发生的(并不是区间,我竟然一直没想通= =).那么就可以按时间线段树分治了. 把每个询问按时间区间放到线段树对应节点上.那么在每个节点处,把时间点在该区间内的物品,按编号从小到大插入到可持久化\(Trie\)里,就可以解决这个节点上的询问了. 排序可以在最开始将物品…
题目描述 风见幽香有一个好朋友叫八云紫,她们经常一起看星星看月亮从诗词歌赋谈到 人生哲学.最近她们灵机一动,打算在幻想乡开一家小店来做生意赚点钱.这样的 想法当然非常好啦,但是她们也发现她们面临着一个问题,那就是店开在哪里,面 向什么样的人群.很神奇的是,幻想乡的地图是一个树形结构,幻想乡一共有 n 个地方,编号为 1 到 n,被 n-1 条带权的边连接起来.每个地方都住着一个妖怪, 其中第 i 个地方的妖怪年龄是 x_i.妖怪都是些比较喜欢安静的家伙,所以它们并 不希望和很多妖怪相邻.所以这个…
传送门 题意:序列上有nnn个商店,有两种事件会发生: sss商店上进购标价为vvv的一个物品 求编号为[l,r][l,r][l,r]之间的位置买ddd天内新进购的所有物品与一个数xxx异或值的最大值. 每个位置都有一种物品每天会新进购(最开始会给出). 思路: 第一眼显然的线段树套可持久化01trie 恭喜MLE走人 然后发现每个人的询问可以放到按时间建出的线段树上,这个不就可以线段树分治离线处理了吗. 于是把每天进购的物品排个序下放,每一层线段树用一个可持久化01trie来统计答案即可(注意…
题目大意:给你一颗n个节点的树,最初点集S为空. 有m次操作:往当前点集S中加入/删除一个点,询问点x至集合S中任意点的最小距离,回到第t次修改点集的操作后的状态. 数据范围:$n,m≤10^5$ 我们先无视这个可持久化的要求,考虑下不可持久化怎么做. 显然考虑动态树分治. 令点v为当前分治中心,u为v在点分树上的父亲, 每个点开一个数组D,D[x]表示以v为根的点分树中,与v距离为不大于x的点的标记点数量. 我们借助这个数组,可以方便地求出从v走最少多少步可以走到一个标记点. 首先考虑查询操作…
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4137 关于可持久化01trie树:https://www.cnblogs.com/LadyLex/p/7281110.html 看了看它的两道例题,就没写. 特殊商品可以直接用可持久化trie做. 其他部分用线段树分治.修改是单点的,询问是区间,原来想的是把询问区间定位后有 mlogn 个,在线段树的每个叶子上贡献一番:结果TLE了,因为若是在叶子处贡献,一个询问就要做 r-l+1 次.…
[BZOJ4137]火星商店问题(线段树分治,可持久化Trie) 题面 洛谷 BZOJ权限题 题解 显然可以树套树,外层线段树,内层可持久化Trie来做. 所以我们需要更加优美的做法.--线段树分治. 什么叫做线段树分治呢? 我们发现每次询问都是区间的形式,看到区间我们就可以想到线段数. 我们接着观察,发现了两个特点:询问是区间,加入新数是单点. 那么我们对于单点构建线段树,在本题中这个单点是按照时间顺序构建的. 所以每次询问在不考虑区间的情况下对应的时间是唯一的. 所以把每次询问暴力放到线段树…
[FJOI2015]火星商店问题 前天考了到线段树分治模板题,全场都切了,就我不会QAQ 于是切题无数的Tyher巨巨就告诉我:"你可以去看看火星商店问题,看了你就会了." 第一道线段树分治题,看了yyb博客,学习了一波. 其实线段树分治就是对操作的时间分治. 对线段树每个节点开一个\(vector\),把询问的区间(时间的区间)看成一段一段放到线段树的\(vector\)里面存着. 注意到修改会延续到最后一刻,所以修改只是左端点不一样而已,相当于一个后缀. 把修改按照位置排序(这个时…
重新写一年前抄题解的那题,当时我啥都不会只是Ctrl+C,Ctrl+V写过的题,今天重新写一遍. 题解: 不会线段树分治,还是学一下这东西吧,这是我的第一道线段树分治. 首先对于特殊商品,可以直接可持久化Trie记录答案.首先考虑对每个线段树开一个vector,把询问的时间区间看成一段一段的塞到线段树里,修改实际上是相当于一个后缀.然后把修改按位置排序,然后仿照线段树的形式按时间分治,mid前的修改扔到左边数组里递归,反之扔到右边,这样能够排除这一维的限制.然后空间上用可持久化Trie,前缀和相…
感觉这个线段树分治和整体二分几乎相同啊~ 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…