随笔分类 -  树状数组

摘要:bzoj3378[Usaco2004 Open]MooFest 狂欢节 题意: n只奶牛,第i只听力为vi,坐标为xi,两只奶牛聊天时音量是max(vi,vj)*abs(xi-xj)。求n(n-1)/2对奶牛的音量和。n≤20000。 题解: 首先所有奶牛按x排序,记录其位置,接着再按它们音量升序排 阅读全文
posted @ 2016-11-17 06:53 YuanZiming 阅读(319) 评论(0) 推荐(0)
摘要:bzoj1109[POI2007]堆积木Klo 题意: n个数,第i个数为ai,现在要移走一些数,使得移走后有最多的数位于它对应的位置上。求移走的数。n≤100000。 题解: dp方程:f[i]=f[j]+1(i>j,a[i]>a[j],a[i]-a[j]>=i-j即a[i]-i>=a[j]-j) 阅读全文
posted @ 2016-11-07 14:07 YuanZiming 阅读(283) 评论(0) 推荐(0)
摘要:bzoj1782[Usaco2010 Feb]slowdown 慢慢游 题意: n只奶牛各有一个目的地。它们按顺序从根节点到达自己的目的地,如果当前奶牛经过了其它已经到达的奶牛的目的地,就要放慢一次脚步。求每只奶牛要放慢多少次脚步。n≤100000。 题解: 对树dfs,求每个节点的进栈时间和出栈时 阅读全文
posted @ 2016-09-04 15:19 YuanZiming 阅读(262) 评论(0) 推荐(0)
摘要:bzoj2789[Poi2012]Letters 题意: 给出两个长度相同且由大写英文字母组成的字符串A、B,保证A和B中每种字母出现的次数相同。现在每次可以交换A中相邻两个字符,求最少需要交换多少次可以使得A变成B。长度≤1000000 题解: 把A串中所有字母替换成该字母在B串中的位置,如果有相 阅读全文
posted @ 2016-09-04 15:12 YuanZiming 阅读(216) 评论(0) 推荐(0)
摘要:bzoj3211花神游历各国 题意: n个数的序列,m个操作,操作两种:区间开根(向下取整)和区间求和。n≤100000,m≤200000,序列中的数非负且≤109。 题解: 一个≤109的数开6次根就变成1了。因此开根操作可以暴力只开不是1或0的数。对每个数维护并查集表示离它最近的不是1或0的数, 阅读全文
posted @ 2016-08-17 14:16 YuanZiming 阅读(174) 评论(0) 推荐(0)
摘要:bzoj1103[POI2007]大都市meg 题意: 一个n点树,根节点为1,初始时全部边为土路,共n-m+1次操作,每次可将一条边改为公路或求根节点到某个节点要几个多少土路。n,m≤250000 题解: 先求出DFS序,进入节点在时间点的权值为1,离开节点在时间点的权值为-1,如果把公路转成土路 阅读全文
posted @ 2016-08-16 22:47 YuanZiming 阅读(184) 评论(0) 推荐(1)
摘要:bzoj1901 Zju2112 Dynamic Rankings 题意: 维护数据结构,支持区间第k大和单点修改。序列大小,操作数≤10000 题解: 构造一个树状数组,树状数组中的节点用主席树维护。一开始先插入序列中的节点,然后对于修改,就是将经过的树状数组上的主席树删除旧值,再插入新值;对于查 阅读全文
posted @ 2016-08-16 21:30 YuanZiming 阅读(138) 评论(0) 推荐(0)
摘要:bzoj3155Preprefix sum 题意: 询问一个数组前缀和数组的前缀和,支持单点修改。 题解: SSi=sigma(i,1,n)(n-i+1)*ai=(n+1)*Si-sigma(i,1,n)i*ai。然后就只要用树状数组维护ai和i*ai的前缀和就行了。 代码: 20160630 阅读全文
posted @ 2016-07-30 13:28 YuanZiming 阅读(339) 评论(0) 推荐(0)
摘要:bzoj4384[POI2015]Trzy wieże 题意: 给定一个长度为n的仅包含'B'、'C'、'S'三种字符的字符串,请找到最长的一段连续子串,使得这一段要么只有一种字符,要么有多种字符,但是没有任意两种字符出现次数相同。 题解: 恶心的树状数组题。首先先求出只有一种字符的最长字串。然后预 阅读全文
posted @ 2016-07-30 13:09 YuanZiming 阅读(341) 评论(0) 推荐(0)
摘要:bzoj1264[AHOI2006]基因匹配Match 题意: 某种序列由n种数组成,每种数在该序列中正好出现5次。对于两个这样的序列s1和s2,如果存在一个序列u同时成为s1和s2的子序列,则称u是s1和s2的公共子序列。子序列的概念:若从一个序列s中任意抽取一些数字,将它们仍按在s中的顺序排列成 阅读全文
posted @ 2016-07-25 14:24 YuanZiming 阅读(361) 评论(0) 推荐(0)
摘要:bzoj1878[SDOI2009]HH的项链 题意: N个数,M个询问求区间[L,R]中包含了多少种不同的数。 题解: 莫队好像可以做~但正解是树状数组。先将询问按左端点排序,并求出每个数的下一个与它相等的数的位置,同时将每个数第一次出现的位置在树状数组中置为1,此时query(x)求出来的就是1 阅读全文
posted @ 2016-07-23 13:09 YuanZiming 阅读(166) 评论(0) 推荐(0)
摘要:bzoj3289Mato的文件管理 题意: 一共有n份资料,每天随机选一个区间[l,r],Mato按文件从小到大的顺序看编号在此区间内的这些资料。他先把要看的文件按编号顺序依次拷贝出来,再用排序程序给文件大小排序。求每天排序时的交换次数。 题解: 还是莫队,但是转移的时候用树状数组维护逆序对个数,总 阅读全文
posted @ 2016-07-22 19:53 YuanZiming 阅读(147) 评论(0) 推荐(0)
摘要:bzoj1452[JSOI2009]Count 题意: n*m矩阵,支持两个操作,修改某个格子权值和查询某个子矩阵特定权值出现次数。n,m≤300,权值为1到100的整数。 题解: 原来二维前缀和也可以用树状数组维护,只要那个不断增加/减少lowbit的循环再嵌套一层就行了。同时因为权值是1到100 阅读全文
posted @ 2016-07-20 19:58 YuanZiming 阅读(296) 评论(0) 推荐(0)