一些统计维护的问题

一些统计维护的问题

原文下载地址@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

posted @ 2013-08-08 17:35  FancyCoder0  阅读(1638)  评论(1编辑  收藏  举报