• 冬令营颓废笔记


    分块

    线性序列分块

    主要用于处理不便于合并两个区间的问题。

    蒲公英

    题面

    区间众数,强制在线,(n,m<=40000)

    Solution

    本题为序列分块经典题。
    显然要先离散化,对序列分块。
    预处理出:
    (cnt[i][j]):到(i)块颜色为(j)的总数
    (f[i][j]):从块(i)(j)的众数:枚举块的开头,扫一遍即可
    (num[i][j]):从块(i)(j)的众数是什么数
    然后我们在询问的时候,先把块里面的众数找到,然后暴力处理左右两边的散点,开桶计算,每个数字判断一下即可。

    树上分块

    块的计数

    题面

    问有多少种方法把一颗树分成若干块使得每个块的点数相同。

    Solution

    观察后可以发现几个性质:
    1.若让某颗子树能分成若干个大小为(x)的块,则其点数必为(x)的倍数。
    2.若让整棵树可行,则必须有(n/x)个可行子树。

    王室联邦

    题面

    给定一颗(n)个节点的树,把这棵树分为若干个块,块的大小(<=3B &>=B),两个块之间可以共用1个节点,问如何划分。(n<=1000)

    Solution

    暴力搜索,递归结束前进栈,做完一个孩子节点后检查,若满足要求则出栈。
    事实上,这是把一个树分块的一种方法

    GTY的妹子树

    题面

    维护一棵初始有n个节点的有根树(根节点为1),树上节点编号为1-n,每个点有一个权值wi。
    支持以下操作:
    0 u x 询问以u为根的子树中,严格大于x的值的个数。(u=lastans,x=lastans)
    1 u x 把u节点的权值改成x。(u=lastans,x=lastans)
    2 u x 添加一个编号为"当前树中节点数+1"的节点,其父节点为u,其权值为x。(u=lastans,x=lastans)
    最开始时lastans=0。

    Solution

    分块套splay
    考虑这样分块:dfs,若父亲节点所在的块的块未满,则塞入父亲节点所在块中,否则自成一块。
    事实上,这是树分块的另一种方法
    块内有序,块外暴力即可。
    kuLzRA.png
    kuOAIg.png


    莫队

    不带修莫队

    奇偶排序:若左端点不在同一个块里面,按左端点排序,否则对右端点排序,当左端点在奇数块,则把右端点从小到大排序,否则把右端点从大到小排序。

    由乃的玉米田

    题面

    每次询问一个区间,询问这个区间内是否有:
    任意两个数相加等于(x)
    任意两个数相减等于(x)
    任意两个数相乘等于(x)

    Solution

    用bitset来存数字是否出现
    是否相加有(x):将整个bitset向左移动(x)位,与原bitset and一下即可
    是否相减有(x):将整个bitset向右移动(x)位,与原bitset and一下即可
    是否相乘有(x):暴力枚举即可

    带修莫队

  • 相关阅读:
    不怕路长,只怕心老——走在IT行业的路上
    python中 r'', b'', u'', f'' 的含义
    WSGI接口
    HTTP协议简介
    Flask中的Session
    一个 android 开机自动启动功能的例子
    遍历 JObject各属性(CSharp2)
    ASP.NET 伪随机数函数避免重复一例
    浏览器环境下 ES6 的 export, import 的用法举例
    在浏览器环境使用js库(不用require功能)
  • 原文地址:https://www.cnblogs.com/GoldenPotato/p/10327349.html
Copyright © 2020-2023  润新知