![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
树状数组
Facico
生命是闪耀的此刻,不是过程,就像芳香不需要道路一样。
展开
-
Mato的文件管理
DescriptionMato同学从各路神犇以各种方式(你们懂的)收集了许多资料,这些资料一共有n份,每份有一个大小和一个编号。为了防止他人偷拷,这些资料都是加密过的,只能用Mato自己写的程序才能访问。Mato每天随机选一个区间[l,r],他今天就看编号在此区间内的这些资料。Mato有一个习惯,他总是从文件大小从小到大看资料。他先把要看的文件按编号顺序依次拷贝出来,再用他写的排序程序给文件大小排序原创 2016-06-26 15:53:37 · 1275 阅读 · 3 评论 -
【JZOJ5296】【清华集训模拟】Sequence(整体二分)
DescriptionSolution这是第一次打整体二分。是一道十分裸的整体二分。 整体二分大致思想就是,对于一坨询问,我们二分一个值,然后对所有的询问都进行判断,然后分别放到[l,mid]和[mid+1,r],这要每次枚举的区间都是[l,r]的话,时间复杂度就是log的。 首先排名[x,y]的可以用主席树来搞出它的值域范围。 我们对于b的答案二分一个值mid。然后找到所有b的值小于mid(原创 2017-08-23 22:10:44 · 453 阅读 · 0 评论 -
【GDOI2017第三轮模拟day2】树的难题(点剖,树状数组)
DescriptionSolution一看就知道是点剖,但是还要套上一个数据结构,感觉很麻烦,比赛的时候直接上暴力。 点剖的时候在分治中心的时候,因为发现颜色是一个很麻烦的东西,所以考虑对直系儿子的颜色进行排序,然后对同一个颜色的开一个树状数组,然后对整体开一个树状数组,用树状数组log方的时间求最大值(如果r-lowbit < l那么r–) 这样做是nlog3nnlog^3n的,但是因为树状数原创 2017-04-22 16:14:30 · 776 阅读 · 0 评论 -
【NOIP2014模拟10.25A组】画矩形
DescriptionSolution这题一眼就看出可以用树套树来做,但是打起来好麻烦,常数还大,所以只打了30分。 其实,这是一道裸的cdq分治,把询问拆成[l,mid]和[mid+1,r],[l,mid]的修改会对[mid+1,r]的修改产生影响。 cdq分治就是二分时间,然后处理完左边对右边的影响,然后继续往下递归。 记录一个点被多少个矩阵覆盖,首先如果矩阵的标号是(x,y,xx,yy)原创 2017-01-21 07:53:01 · 615 阅读 · 0 评论 -
【51Nod 1463】找朋友
Description给定: 两个长度为n的数列A 、B 一个有m个元素的集合K 询问Q次 每次询问[l,r],输出区间内满足|Bi-Bj|∈K 的最大Ai+Aj数据约定: n,Q<=100000 m <= 10 0<=A[i]<=1000000000 1<=B[i]<=n 1<=K[i]<=n 保证B[i]互不相等Solution这是一道需要认真看题的题目。 因为要询问[l,原创 2016-12-22 15:56:14 · 926 阅读 · 0 评论 -
【NOIP2016提高A组集训第10场11.8】力场护盾
DescriptionZMiG成功粉碎了707的基因突变计划,为了人类的安全,他决定向707的科学实验室发起进攻!707并没有想到有人敢攻击她的实验室,一时间不知所措,决定牺牲电力来换取自己实验室的平安。 在实验室周围瞬间产生了一个无限大的力场护盾,它看上去无懈可击!不过ZMiG拥有惊人的双向观察能力,经过他的反复观察,找到了这个护盾的N个弱点,他本想逐一击破,却发现一股神秘力量阻止了他的原创 2016-11-08 22:31:57 · 690 阅读 · 0 评论 -
【NOIP2016提高A组五校联考1】排队
DescriptionSolution比赛的时候其实想到了正确的方法,但是以为这是错的,就没敢打。 首先可以用一个堆来维护空余的优先位置。 然后现在的问题就是,求一个点上面有多少个有值的点。 如果一个点对答案又贡献,那么它的子树的答案都要加1。那么维护dfs序的话,假设这棵子树的范围控制的是[x,y],那么就对x进行加1操作,y+1进行减1操作,然后如果要询问x的答案,那么直接在树状数组中的[原创 2016-10-04 21:30:01 · 766 阅读 · 2 评论 -
【NOIP2016提高A组五校联考1】道路规划
DescriptionSolution仔细的推敲了一下题目,如果a[i]Code#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<cmath> #define fo(i,a,b) for(i=a;i<=b;i++) using namespace std; const int maxn原创 2016-10-04 21:21:32 · 584 阅读 · 0 评论 -
【NOIP模拟】整除
Description麦克雷有一个1~n的排列,他想知道对于一些区间,有多少对区间内的数(x,y),满足x能被y整除。Solution这道题我到这枚想出来…..打了个莫队又打错了TAT 我们先来分析一下题目。 可以理解为,x能做出的贡献就是他的倍数在区间中的存在个数。(因为找倍数是n log n的,但是找因数是n√n的) 那么我们可以拆成两部分,一个数x的倍数在前面的情况,另一个是x的倍数在后原创 2016-09-22 16:48:17 · 630 阅读 · 0 评论 -
【NOIP模拟】被粉碎的线段树
DescriptionSolution不会做啊!打了个贪心,没有加倍增,然后在打了几个特殊情况拿了85分。 其实答案有一个性质:区间的定位个数=2*区间的长度-完全被包含的区间个数,比如说[2,7]的答案=(7-2+1)*2-9=3,包含的区间([2,2],[3,3],[4,4],[5,5],[2,3],[5,7],[6,7],[6,6],[7,7])。 好神奇啊! 为什么NIE?(感觉我原创 2016-09-03 20:20:14 · 628 阅读 · 0 评论 -
【GDOI模拟】子串
DescriptionSolution这题,刚看到还以为是后缀自动机。但是好像很难做。又想了想莫队,好像也不行。多串匹配,AC自动机,难得打,又看回NOIP组去。 比赛完后,正解的确是AC自动机。 很显然是,把所有的查询的字符串丢进AC自动机里面去,然后每个字符串可以拆成两个操作,因为要询问[l,r]所以拆成+[1,r]和-[1,l-1]。 然后把上面的字符串放到AC自动机里面跑。 比如说,原创 2016-09-14 18:46:12 · 832 阅读 · 0 评论 -
【GDOI 2016】机密网络
DescriptionSolution环套外向树分治!!!很有趣,比赛时打了个暴搜就过了。 以后还有仙人掌分治(瞎猜)怎么办……幸好只有一个环很容易想到,在环上拆掉一条边,然后求点对,在计算只通过这条边的点对,就好了!!!问题来了,只通过这条边的点对要怎么统计正难则反。 只通过这条边的点对=删边前可以的点对-删边后和删边前都可以的点对。 所以,删边前可以的点对=ans=只通过这条边的点对+删边原创 2016-08-07 18:34:37 · 689 阅读 · 0 评论 -
【NOIP提高】Binary
DescriptionSolution维护位运算的题目一般都枚举每一个二进制位,来维护每个二进制位的信息。 那么要and y,访问y的每个二进制为1的节点,看看对应的位置有多少个。 但是这一题有一个很棘手的问题:怎么样才能处理加上任意数然后做位运算操作。 我们可以知道一个二进制j的位置上是1,说明2j−1...2j−12^{j-1}...2^j-1这段位置上有值,如果要加上x然后判断这个区间是原创 2016-08-17 20:15:48 · 698 阅读 · 0 评论 -
【Cqoi2011】【BZOJ3295】动态逆序对
Description对于序列A,它的逆序对数定义为满足iSolution树状数组一看到逆序对就要想到树状数组。 维护每个数前面到目前有多少个比自己大。动态的思路因为要动态维护,每次只删掉一个数在逆序对中的贡献:及每个数前面有多少个比自己大,每个数后面有多少数比自己小。 先预处理出每个数前面有多少个比自己大ll[i],每个数后面有多少个数比自己小rr[i]。 很显然每次只用总答案删掉位置为i的原创 2016-07-29 10:25:03 · 954 阅读 · 0 评论 -
【GDOI模拟】屏保
Description你最近安装了一个新的屏幕保护程序,如果你离开键盘5 分钟,屏保将会显示一个有热带鱼的水族馆,水族馆的底端是由沙石形成的供鱼玩耍的地方,沙石的高度可以设置,水位也可以设置。水族馆可以看做是一个二维平面,宽看作N-1 列,最左端的横坐标为0,最右端横坐标为N-1,每个整数横坐标都对应着一个沙石的高度H_i(0<=i<=N-1),相邻横坐标i 和i+1 之间的沙石可以看做是由(i,H原创 2016-07-04 16:25:21 · 623 阅读 · 0 评论 -
【TJOI2016&&HEOI2016】序列
DescriptionSolution比赛时乱水开始打题后最先想了这一题:第一题太水,第二题太机智,没办法啊……TAT 然后打了个LIS(用二分n log n进行DP,得出最长不下降子序列)进行暴搜,后来想到可以预处理出所有改变值得最大值和最小值,然后就变成了一个二维的最长不下降子序列,不知道为什么,第一意识就打了个贪心:转移以最大值为第一关键字,a值为第二关键字。 然后竟然100分水过,我还真原创 2016-07-14 19:54:52 · 1226 阅读 · 0 评论 -
树状数组复习小计
简介其实我以前以为树状数组是一个很没用的东西,今天一看才发现可以干很多事情。 树状数组详细是什么我就不说了,网上还有很多资料。大致就是,每个点x的父边连向的点都是x+lowbit(x)。lowbit(x)=-x and x,就是把x末尾的1变成0并向上推一位,比如lowbit(100)=1000,lowbit(10101)=10110,lowbit(11000)=100000。 (只能看看手打图原创 2016-06-26 16:39:06 · 1545 阅读 · 0 评论 -
【NOIP2017提高A组集训10.28】序列操作
Description一开始有n个非负整数hi,接下来会进行m次操作,第i次操作给出一个数c[i],要求你选出c[i]个大于零的数并将它们减去1。 问最多可以进行多少轮操作后无法操作(即没有c[i]个大于零的数)Solution这题数据范围出的很迷,log^2竟然都能过 很显然我们只用给前k大的数减一,然后我们考虑一段数减完之后相对顺序会怎么变,我们可以发现只有序列末尾相等的那一段会移到那一段的原创 2017-10-31 08:02:28 · 530 阅读 · 0 评论