zoukankan      html  css  js  c++  java
  • 线段树/莫队杂题

    高速公路(road)

    如果直接维护一个点到其它点的距离,维护起来很困难。

    不妨转换思路,考虑每个点对答案的贡献,

    设询问区间为$l,r$,

    则点$i$的贡献为$(i-l)*(r-i)*w[i]=(-i^2+(l+r)*i-l*r)*w[i]$。

    对于$i^2*w[i],i*w[i],w[i]$分别维护,再乘上只与$l,r$有关的系数即可。

    CPU监控

    鸽了

    排序

    如果直接排序,复杂度不能接受。

    考虑到对于01序列,线段树可以$O(logn)$查找并统计设置,完成一次排序。

    二分第q个数的大小,将大于等于mid的值设为1,小于mid的值设为0。

    完成m次排序后检验位置q是否为1即可。

    复杂度$O(mlog^2n)$

    山海经

    分块做法:

    处理每个块内的答案,前缀和最小值和前缀和最大值。

    答案只有两个来源:

    1.每个块中的答案

    2.不在同一块的最大值减最小值。

    线段树做法:

    对于线段树的每个节点,维护一些信息:

    左侧开始的最优决策,右侧开始的最优决策,整个区间的最优决策,合并是简单的。

    问题在于如何查询,按照正常的思路很难在log的复杂度内用上以上三个信息。

    方法是改变查询函数的返回值,将正常的一个改为一个结构体,表示的信息同节点保存的信息。

    那么用节点合并信息的方法就可以合并答案。

    莫队做法:

    回滚莫队。

    对于询问在同一块内的答案暴力。

    右端点是单调递增的,维护出区间内的最优答案,到块边界的最优答案。

    对于每次询问暴力从块边界滚到左端点,维护出区间内的最优答案和到块边界的最优答案。

    那么最优答案只可能来自三个方向:

    左侧最优答案,右侧最优答案,左右到块边界合并后的答案。

    permu

    问区间l,r内最长值域连续段长度。

    如果暴力在线段树上合并答案,复杂度是$O(nsqrt n logn)$的,优化一下莫队排序的顺序,可过。

    显然本题暴力可以用并查集解决,将相邻的数,在存在该数的情况下合并即可。

    然而删除操作较困难。

    因为右区间是单调的,使用回滚莫队,有效规避了删除操作。

    只要暴力将修改的范围重构就可以了。

  • 相关阅读:
    zoj 3620 Escape Time II dfs
    zoj 3621 Factorial Problem in Base K 数论 s!后的0个数
    bzoj 1789: [Ahoi2008]Necklace Y型项链 贪心
    BZOJ 4027: [HEOI2015]兔子与樱花 树上dp
    Codeforces Beta Round #80 (Div. 1 Only) D. Time to Raid Cowavans 分块
    图论:单源最短路与多源最短路问题
    图论:图的概念与图的储存方式
    hdu 4802 GPA 水题
    Codeforces Round #202 (Div. 1) A. Mafia 贪心
    Spring Bean配置默认为单实例 pring Bean生命周期
  • 原文地址:https://www.cnblogs.com/skyh/p/11253079.html
Copyright © 2011-2022 走看看