首页 > 其他分享 >线段树均摊复杂度

线段树均摊复杂度

时间:2023-05-18 18:56:56浏览次数:57  
标签:log max 线段 均摊 sum 操作 operatorname 复杂度

GSS4 - Can you answer these queries IV

  • 操作 \(1\):\(a_i=\sqrt{a_i},i\in[l,r]\)
  • 操作 \(2\):询问 \(\sum_{i=l}^ra_i\)

开根号无法使用 tag 的方式维护,因为开根号后不确定减去多少,无法维护 \(\sum a_i\)。
\(a_i=2^{\log a_i}\),每次开根号后 \(\log a_i\) 会减半,操作 \(\log\log a_i\) 后 \(\log a_i=1\),也就是说 \(a_i\) 不会再发生变化了。
\(\Phi=\sum_{i=1}^n\log\log a_i\),每次区间开根都让 \(\Phi\) 减少 \(r-l+1\),所以开根操作的总复杂度为 \(\mathcal O(n\log^2w)\)。
复杂度是 \(\mathcal O(n\log^2w+q\log n)\)。

基础数据结构练习题

  • 操作 \(1\):\(a_i=a_i+x,i\in[l,r]\)
  • 操作 \(2\):\(a_i=\sqrt{a_i},i\in[l,r]\)
  • 操作 \(3\):询问 \(\sum_{i=l}^ra_i\)

对于开方操作于上一题的操作不一样,修改会加上值。
把 \(a_i=\sqrt{a_i}\) 的操作变成 \(a_i=a_i-(a_i-\sqrt{a_i})\),对于所有相同的值就可以一起操作了。
而且,不仅仅是 \(\min_{i=l}^r=\max_{i=l}^r\) 可以进行操作,只要满足 \(\min-\sqrt{\min}=\max-\sqrt{\max}\) 就可以把开根号变成减法。那么把线段 \(s\) 变为完全相同的次数就是 \(\mathcal O(\log\log(\max-\min))\)。
\(\Phi=\sum_s\log\log(\max-\min)\),每次区间加只会让 \(\log n\) 块势能增加 \(\log\log w\)。
复杂度是 \(\mathcal O(q\log n\log\log w)\)。

I like Query Problem

  • 操作 \(1\):\(a_i=\lfloor\frac{a_i}x\rfloor,i\in[l,r]\)
  • 操作 \(2\):\(a_i=x,i\in[l,r]\)
  • 操作 \(3\):询问 \(\sum_{i=l}^ra_i\)

同理,对每个线段 \(s\) 维护 \(\min,\max\)。如果区间内 \(\min=\max\) 就直接整除,否则就暴力除最多 \(\log w\) 次。推平就打标记。
\(\Phi=\sum_s\log(\max-\min)\),每次区间推平只会让 \(\log n\) 块势能增加 \(\log w\)。
复杂度是 \(\mathcal O(q\log n\log w)\)。

And RMQ

  • 操作 \(1\):\(a_i=a_i\space\&\space x\)
  • 操作 \(2\):\(a_i=x\)
  • 操作 \(3\):询问 \(\max_{i=l}^r\)

对于操作 \(1\) 暴力操作。记录每个线段的 \(\operatorname{or}_s\),若 \(\operatorname{or}_s\&\space x=0\) 就直接不对这条线段进行操作。
\(\Phi=\sum_s\operatorname{popcnt}(\operatorname{or}_s)\)。初始时 \(\Phi=n\log w\)。操作 \(1\) 遍历过得每个节点都至少让 \(\Phi\) 减少 \(1\)。操作 \(2\) 会让 \(\Phi\) 增加 \(\log n\log w\)。所以总势能最多为 \(n\log w+q\log w\)。
复杂度是 \(\mathcal O(n\log w+q\log n \log w+n\log n)\)。

Counting Stars

  • 操作 \(1\):\(a_i=a_i+\operatorname{highbit}(a_i),i\in[l,r]\)
  • 操作 \(2\):\(a_i=a_i-\operatorname{lowbit}(a_i),i\in[l,r]\)
  • 操作 \(3\):询问 \(\sum_{i=l}^ra_i\),对 \(998244353\) 取模

发现无论怎么操作,\(\operatorname{popcnt}(a_i)\) 总是不升的。记录最高位,如果是操作 \(1\) 就相当于 \(a_i=a_i+2^{\operatorname{highbit}(a_i)}\),只储存 \(2^{\operatorname{highbit}}\) 的话就是区间乘 \(2\)。如果是操作 \(2\) 就可以暴力修改,修改完顺便维护一下最高位有没有被减掉,区间是否全 \(0\)。
\(\Phi=\sum_{i=1}^n\operatorname{popcnt}(a_i)\)。
复杂度是 \(\mathcal O(n\log w+n\log n)\)。

Lowbit

  • 操作 \(1\):\(a_i=a_i+\operatorname{lowbit}(a_i),i\in[l,r]\)
  • 操作 \(2\):询问 \(\sum_{i=l}^ra_i\),对 \(998244353\) 取模

做法几乎差不多。一个数在执行 \(\log w\) 次后必然仅有最高位为 \(1\)。这个时候操作 \(1\) 就为区间乘 \(2\) 了。
\(\Phi=\sum_{i=1}^n\log(a_i)\)(这里的 \(a_i\) 是原始序列)。
复杂度是 \(\mathcal O(n\log w+n\log n)\)。

Gorgeous Sequence

  • 操作 \(1\):\(a_i=\max(a_i,x),i\in[l,r]\)
  • 操作 \(2\):询问 \(\max_{i=l}^r\)
  • 操作 \(3\):询问 \(\sum_{i=l}^ra_i\)

维护区间最小值 \(mn_1\),最小值出现次数 \(cnt\),严格次小值 \(mn_2\)。如果 \(x\le mn_1\) 直接退出。如果 \(mn_2<x\le mn_1\) 就用 \(x\) 更新 \(mn_1\) 和 \(cnt\) 等。否则递归儿子。
由于我太菜了,所以证明在这里
复杂度是 \(\mathcal O(n\log^2n)\)。


关于 Beats,等我彻底理解了再继续写。

标签:log,max,线段,均摊,sum,操作,operatorname,复杂度
From: https://www.cnblogs.com/bxjz/p/sgt-juntan.html

相关文章

  • P2495 [SDOI2011] 消耗战 线段树合并做法
    看到题解里面有一个线段树合并做法!感觉很厉害,但是题解和代码都不是很详细所以补充一下不妨假设\(dp_u\)表示\(u\)及其子树内把所有关键点都切断的最小代价,那么不难有\[\begin{equation}dp_u=\begin{cases}+\infty&u是关键点\\\sum_{v\in\operatorname{son}(u)}\m......
  • 线段树维护矩阵
    对于一些只有单点修改且维护的信息具有递推性的题目,由于运算具有结合律,可以将两区间合并写成矩阵乘法的形式,省去一些麻烦的讨论。前置知识:广义矩阵乘法对于一个\(n\timesm\)的矩阵\(A\)和一个\(m\timest\)的矩阵\(B\),定义广义矩阵乘法:\[C_{i,j}=\bigoplus_{k=1}^{m}A_......
  • 【CF446C】DZY Loves Fibonacci Numbers(线段树)
    Description给定一个序列,资瓷区间加上一个斐波那契数列,区间求和。Solution有一个性质:fib[a+b]=fib[a−1]×fib[b]+fib[a]×fib[b+1]fib[a+......
  • 线段树水题
    [THUSCH2017]大魔法师​ 给定\(n\)个三元组\((A,B,C)\)。共有\(m\)种区间操作,分为三大类,七小类。1.\(A_i=A_i+B_i\)2.\(B_i=B_i+C_i\)3.\(C_i=C_i+A_i\)给定值\(v\)4.\(A_i=A_i+v\)5.\(B_i=B_i\timesv\)6.\(C_i=v\)7.区间查询所有三元组......
  • Codeforces Round 767 (Div. 1) E. Groceries in Meteor Town (Kruskal重构树 + 线段
    传送门  出现最大路径权值就应该联想到克鲁斯卡尔重构树,我们对于克鲁斯卡尔重构树求一遍dfs序,维护所有白色点的最大最小dfn(包括出发点),求出最大最小dfn的最近公共祖先既是答案。注意需要特判一下除了本身以外没有白色点情况。#include<bits/stdc++.h>intn,m;constintN......
  • 可持续化线段树
    可持续化线段树前言:“这个数据结构是属于比较抽象的一类。并且代码实现比较繁琐复杂。”别人都这么说,我却觉得挺好理解、也挺好写的(可能是因为我曾经与多道线段树毒瘤题抗争多次)。为了避免以后我突然脑子抽了不记得了,可以拿出来看看。所以写下这篇笔记,希望也能帮到大家。建......
  • P3919 【模板】可持久化线段树 1(可持久化数组) 题解
    一、题目描述:维护这样的一个长度为$n$的数组,支持以下两种操作$1$:在某个历史版本上修改某一个位置上的值$2$:访问某个历史版本上的某一位置的值每进行一次操作,就会生成一个新的版本(对于操作2,生成的就是一个完全一样的版本)。版本编号即为当前操作......
  • 线段树选记
    1.[TJOI2018]数学计算题目描述小豆现在有一个数\(x\),初始值为\(1\)。小豆有\(Q\)次操作,操作有两种类型:1m:将\(x\)变为\(x\timesm\),并输出\(x\bmodM\)2pos:将\(x\)变为\(x\)除以第\(pos\)次操作所乘的数(保证第\(pos\)次操作一定为类型1,对于每一个类型1......
  • hdu:LCIS(线段树+区间合并)
    ProblemDescriptionGivennintegers.Youhavetwooperations:UAB:replacetheAthnumberbyB.(indexcountingfrom0)QAB:outputthelengthofthelongestconsecutiveincreasingsubsequence(LCIS)in[a,b].InputTinthefirstline,indicatingt......
  • 利用最大互信息系数MIC对回归拟合预测数据集做特征自变量的选择,实现降低数据纬度的目
    利用最大互信息系数MIC对回归拟合预测数据集做特征自变量的选择,实现降低数据纬度的目的,简化数据复杂度。程序内注释详细,直接替换excel数据就可以用。程序语言为matlab。可免费指导替换数据,无售后讲解。。ID:2425680290257538......