您的位置:首页 > 运维架构

一些统计维护的问题

2013-08-08 17:35 260 查看
一些统计维护的问题


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



树形数据结构方法

NOI2005 sequence

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

伸展树



Spoj 10628. Count on a tree

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

划分树

主席树





CTSC2008 nextwork

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

树套树



BZOJ3083: 遥远的国度

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

树链剖分

BZOJ2631 Tree(伍一鸣)

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

Link-Cut Tree



Bzoj3132:上帝造题的七分钟

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

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



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

询问(p,q)则为





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

bzoj2874: 训练士兵

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

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



bzoj1452: [JSOI2009]Count

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

树状数组



Tsinsen A1302. JZPFAR(顾昱洲)

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

K-d Tree



Tsinsen A1365. 森林旅店

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

K-d Tree



分块方法

石家庄一中模拟赛p1裸

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

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

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

分块后用堆维护



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

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

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

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

分块

Bzoj2821 作诗Poetize

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

分块+二分



bzoj2741 【FOTILE模拟赛】L

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

分块+Trie



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

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

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

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

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

分块



Bzoj3005 体育课(sdoi2012)

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

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

2、交换两个数

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

分块+单调队列+二分



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

复杂度O(N^1.5logN)

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

bzoj2128: cheat

在线询问某个子矩形中a到b之间的数的个数

分块



Bzoj2038: 小Z的袜子

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

莫队算法



10707. Count on a tree II

询问树链上不同颜色数。

树上莫队算法



合并方法

Codechef August Challenge 2013 :Sereja and Ballons

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

并查集+主席树



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

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

分治方法

bzoj2738: 矩阵乘法(梁盾)

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

离线分治(整体二分)



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

Bzoj2683: 简单题

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

CQD分治



Bzoj2716: 天使玩偶

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

CQD分治



树的分治方法

BZOJ2566 xmastree

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

点的分治



Codechef August Challenge 2013 : Prime Distance On Tree

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

点的分治+FFT

BZOJ1267: Kth Number I

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

点的分治

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: