首页 > 其他分享 >baka's trick

baka's trick

时间:2023-10-04 17:34:58浏览次数:29  
标签:le 复杂度 mid trick mathcal baka

baka trick 之于双指针,就像回滚莫队之于莫队。

考虑将双指针的过程变换一下:加入一个分界点 \(mid\),分别维护 \([l,mid],(mid,r]\) 的信息,当 \(l>mid\) 的时候 \(mid\gets r\),然后把原先 \((mid,r]\) 的信息直接拿过来用,原来存储 \((mid,r]\) 信息的容器清空。

不难发现一个信息只会被加入 2 次,所以时间复杂度 \(\mathcal O(nw)\),\(\mathcal O(w)\) 是单次信息加入的复杂度。这个过程可以用双栈模拟。也就是每个栈维护栈底到栈顶信息的前缀和,当左边栈空的时候把右边栈里的元素加入左栈。

例题 I. [2019 五校联考镇海 B] 小 ω 的仙人掌

求最短区间 \([l,r]\) 使得做完 \([l,r]\) 内的背包后权值为 \(w\) 的代价 \(\le v\)。\(n\le 10^4,w\le 5000,v\le 10^9\)。

场上不会这个 trick 被打爆了 /ll,不过分治卡卡常好像跑得飞快?

这个背包的本质是 \(\min,+\) 卷积所以没法删除,于是使用双栈优化即可。\(\mathcal O(nw)\)。

例题 II. [雅礼集训 2018 Day 10] 贪玩蓝月

这题并不是 baka trick /lh,但我确实没题放了 /ll。

线段树分治是 trivial 的,但是不牛。

还是考虑双栈模拟,左栈存队列左端,右栈存队列右端,求答案就做一个单调队列滑动窗口。为了代码方便可以把其中一个背包复制一遍,写起来比较舒服。

当一个栈弹空的时候,暴力重构两个栈,也就是把另一个栈的一半信息分过来。

这样做的复杂度如何?考虑势能分析。令势能为两栈大小之差的绝对值,每次增删会产生 \(1\) 的势能,而每次重构会花费 \(\mathcal O(np)\) 的代价消耗 \(n\) 单位的势能。所以复杂度即为 \(\mathcal O(mp)\)。

以后有例题了可能会再放?

标签:le,复杂度,mid,trick,mathcal,baka
From: https://www.cnblogs.com/663B/p/17742494.html

相关文章

  • trick记录
    前言记录一下有用的trick统计有上下界,并且答案和每个数位有关的不一定是数位dp,还可以考虑在某个地方后面的数变自由,也就是可以随便选,经常用在二进制中如果是区间维护的问题,并且这个区间会进行比较复杂的操作,那么就可以考虑用矩阵来表示操作。分数的操作其实可以考虑......
  • OI 中一些可能有用的小 Trick 与注意点
    1.考试的时候先考虑dp和线段树2.记得检查数组空间3.考虑尽量卡常4.尽量考虑退式子5.看到关于01爆搜选择的一定要先考虑01背包,不要直接写爆搜6.清楚要不要文件读写和子文件夹7.树上边权转点权转移到儿子节点,但是特别注意多余信息处理(尤其是树剖的时候)比如树剖结束的时候处理......
  • OI Tricks
    记录一些见到的感觉很有用的tricks。平均值对于和的平均值(形式化地,\(\bara=\dfrac{\sum_{i=1}^na_i}{n}\)),可以转化成\(a_i-\bara\)然后和\(0\)乱搞。异或哈希就是xorhash,可以在CF上找到详细教程:Link。主要用于只关心元素集而不关心顺序的时候。(可能......
  • OI Tricks
    记录一些见到的感觉很有用的tricks。平均值对于和的平均值(形式化地,\(\bara=\dfrac{\sum_{i=1}^na_i}{n}\)),可以转化成\(a_i-\bara\)然后和\(0\)乱搞。异或哈希就是xorhash,可以在CF上找到详细教程:Link。主要用于只关心元素集而不关心顺序的时候。(可能......
  • Tricks
    枚举子集:j=(j-1)&i,复杂度为\(\mathcalO(n^3)\)树上链加,单点和等于单点加,子树和。不好处理的区间询问考虑离线扫描线或者可持久化数据结构。区间,树链询问有可减性时考虑差分。对于只合并,不分裂的东西,考虑启发式暴力合并。流题建模时注意费用流先保证最大流,要检......
  • 一些 trick
    图论有关于树/DAG的构造等,可以考虑从叶子/入读为零的节点开始删点。树据结构有关于维护下标大小信息的合并,可以借助线段树上本身的左儿子下标小于有儿子下标简单处理。维护一个三元组\((a,b,c)\)的信息,看看是否能拆成\((a,b)+c\)的形式更易维护。树剖的边转点:钦定边......
  • trick
    记一下遇到的trick。一些来自xgf大神。区间问题。如果要求\(l\in[L,R],r\in[L,R]\)并且答案可以预处理的话,将其抽象为二维平面。令\((l,r)\)表示\([L,R]\)的答案,答案为\((L,L),(R,R)\)这个矩阵的答案。去做二维前缀和即可。......
  • 「Trick」智慧
    技巧部分离线可能会使询问、操作的配置变得不那么怪异,甚至具有某种性质,类似去掉了某一维度的限制。ACAM尝试在Trie树上或者\(fail\)树上进行DP。(这不是很显著吗啊喂!)注意到一些上限可以使那些看起来是暴力的做法变得优越。对于连续的或运算,结果只增不减,可以注意......
  • Tricks
    用可持久化线段树维护非递归线段树的树链信息可以高效地解决区间半群问题。线段树维护的序列长度要保持不变。关于$d$(约数个数函数):$d(nm)=\sum_{x\midn}\sum_{y\midm}[\gcd(x,y)=1]$;由此可以推导出当$m$为质数,$d(nm)=2d(n)-[m\m......
  • slope trick
    slopetrick概述在\(dp\)过程中,可以维护凸函数的方法,要求\(dp\)值呈凸函数且其斜率均为整数。具体来说,是记录凸函数斜率的变化值,即在什么位置斜率\(\plusmn1\),例如凸函数\(f(x)=|x|\),它由一条斜率为\(-1\)和一条斜率为\(1\)的射线在\(0\)点处相连,那么在零点处斜......