zoukankan      html  css  js  c++  java
  • 一些统计维护的问题

    一些统计维护的问题

    原文下载地址@http://pan.baidu.com/share/link?shareid=2769571370&uk=36862589

     

    树形数据结构方法

    NOI2005 sequence

    区间插入、删除、统一修改、翻转、求和、求最大子序列

    伸展树clip_image002

    Spoj 10628. Count on a tree

    无修改的区间/树链上第K

    划分树

    主席树clip_image004clip_image006

          

    CTSC2008 nextwork

    有修改的区间/树链上第K

    树套树clip_image008

       BZOJ3083: 遥远的国度

                  树的换根、链修改、子树查询

          树链剖分clip_image010

    BZOJ2631 Tree(伍一鸣)

    树的合并、分离、加减、询问

    Link-Cut Tree clip_image012

    Bzoj3132:上帝造题的七分钟

    子矩阵在线整体修改、求和

    前缀和的前缀和方法+二维线段树上帝造题的七分钟clip_image014

    将标记分成四个修改(x,y)-(n,m)的标记

    询问(p,q)则为

    clip_image016

    然后就是一个维护二维前缀和的事了。

    bzoj2874: 训练士兵

    子矩阵先离线整体修改,再在线求和

    前缀和的前缀和方法+主席树训练士兵clip_image018

    bzoj1452: [JSOI2009]Count

    支持两种操作:改变子矩形中某个数,询问某个子矩阵中某个数出现的次数。

    树状数组clip_image020

           Tsinsen A1302. JZPFAR(顾昱洲)

                  给出N个点,M个询问点。询问离某点距离第k大的点。

                  K-d Treeclip_image022

           Tsinsen A1365. 森林旅店

        给出N个点,Q个操作。操作为询问离某点距离前k小的点或增加一个点。

                  K-d Treeclip_image024

    分块方法

    石家庄一中模拟赛p1

    给一个长度为N的数列要求支持两种操作

    (l,r,x)将一段区间整体加一个整数x若元素小于0则该元素变为0

    (l,r)询问一段区间的和

    分块后用堆维护clip_image026

    厦门一中炫动杯”NOIP2011 第四场模拟赛 p4

    给一个长度为N的数列要求支持两种操作

    (l,r,x)将一段区间整体加一个整数

    (l,r,C)询问一段区间中有多少数不小于C

    分块

    Bzoj2821 作诗Poetize

    L-R出现偶数次数的数的个数

    分块+二分clip_image028

    bzoj2741 FOTILE模拟赛】L

    在线询问区间内的最大的连续XOR

    分块+Trieclip_image030

    常州一中某夏令营模拟赛  高速公路highway

    一串长度为N的序列,要支持三个操作:

    1、如果区间中没有损坏的,就将区间所有数都减去一个值,答案加1,如果操作完后有元素小于等于0,则标记为损坏

    2、将区间所有未损坏的元素都加上一个值

    3、给p,将区间所有未损坏且小于p的元素都变成p

    分块clip_image032

    Bzoj3005 体育课(sdoi2012)

    一串长度为N的序列,要求支持三种操作:

    1、给t,给L-R中的数分别加上(i-L+1)*t

    2、交换两个数

    3、查询L-R中的最大值

    分块+单调队列+二分clip_image034

    分块后问题实际转化为对于其中的一块支持三种操作:整体所有加一个t;给整体加一个增量t,即给第i个数加i*t;询问最大值。这个问题是一个经典的斜率优化问题,可以用单调队列预处理出每个元素的优势区间(边界考虑需细致),询问时二分查找当前增量即可。然后对于修改,整一块打标记,剩下边界暴力即可。询问也分为整一块询问和剩下边界暴力。交换直接对于两个块暴力修改即可。

    复杂度O(N^1.5logN)

    本题也可以做差可以转换成最大前缀和。利用t非负也可以将复杂度优化为O(N^1.5)

    bzoj2128: cheat

    在线询问某个子矩形中ab之间的数的个数

    分块clip_image036

    Bzoj2038: Z的袜子

           询问区间[L,R]中随机抽出两个颜色相同的概率。

    莫队算法clip_image038

    10707. Count on a tree II

           询问树链上不同颜色数。

           树上莫队算法clip_image040

    合并方法

          Codechef August Challenge 2013 :Sereja and Ballons

    N个盒子,每个盒子Ai个球,事先给你M个区间(Li,Ri),依次取出某个球,询问当前有多少个区间其中的所有盒子为空.

                  并查集+主席树clip_image042

    询问即统计S(Ri)-S(Li-1)==0的数量,开始每个盒子都是独立的块,如果一个盒子i已空,就将i所在的块与i-1所在的块合并(因为值相同),新增的答案即为Li-1i-1所在的块且Rii所在的块的询问,发现是一个二维偏序的统计,利用主席树预处理即可单次O(logN)询问。

    复杂度为O((N+Q)logN)/O(NlogN)

    分治方法

    bzoj2738: 矩阵乘法(梁盾)

    给你一个N*N的矩阵,每次询问一个子矩形的第K小数。

    离线分治(整体二分)clip_image044

    对于所有的询问一起二分答案,那么每次二分x后统计出所有询问矩阵中不大于x的元素个数(二维树状数组即可),二分后询问分为小于和不小于两种,然后对两种答案分别再二分即可(此时范围减半)。注意做不小于的询问时可以在原来树状数组的基础上直接做,最后还原即可。

    Bzoj2683: 简单题

    离线矩阵单点修改,在线求和

    CQD分治clip_image022

    Bzoj2716: 天使玩偶

    离线增加点,询问离某点曼哈顿最近的点的距离。

    CQD分治clip_image038

    树的分治方法

    BZOJ2566 xmastree

    给一颗点带颜色的树,支持修改点颜色和查询最近相同颜色对。

    点的分治clip_image048

           Codechef August Challenge 2013 : Prime Distance On Tree

                  统计树中dis(a,b)为质数的点对数量

                  点的分治+FFT

    BZOJ1267: Kth Number I

                  统计树中dis(a,b)K大的路径。

                  点的分治clip_image050

  • 相关阅读:
    linux下vim配置以及一些常用的快捷键
    linux下java环境配置
    编译原理实习(应用预测分析法LL(1)实现语法分析)
    hdu 1063(java写高精度)
    loj 1271
    loj 1379(最短路变形)
    hdu 4114(状压dp)
    loj 1002(spfa变形)
    python生产者消费者模型
    python创建一个线程和一个线程池
  • 原文地址:https://www.cnblogs.com/oldmanren/p/3246305.html
Copyright © 2011-2022 走看看