树状数组
文章平均质量分 72
ModestCoder_
一个modest的coder
展开
-
【题解】LuoGu6859:蝴蝶与花
原题传送门这是一个超难题的模板,但是有一个性质,ai=1/2a_i=1/2ai=1/2,我敏锐的感觉到这道题可能是基于这个性质来做的先令l=1l=1l=1,看看是否存在rrr,使得al+...+ar=sa_l+...+a_r=sal+...+ar=s发现不存在这个rrr,当且仅当存在rrr,使得∑i=lrai=s−1且ar+1=2\sum_{i=l}^{r}a_i=s-1且a_{r+1}=2∑i=lrai=s−1且ar+1=2如果存在rrr满足,当然直接输出,若是不存在必定形如考虑移原创 2020-10-25 12:03:12 · 217 阅读 · 0 评论 -
【题解】CF933A:A Twisty Movement
原题传送门就是按顺序先找一段全是1的子序列,再找一段全是2的子序列,再找一段全是1的子序列,再找一段全是2的子序列这样我们就找出了一段诸如111122221111222111122221111222111122221111222的子序列,把第二段和第三段翻转,得到111...111222...222111...111222...222111...111222...222,就是答案就是找出长度最长的四段和令sum1isum1_isum1i表示前缀1的个数sum2isum2_isum2i表示后缀2原创 2020-10-18 10:41:51 · 267 阅读 · 0 评论 -
【题解】LuoGu6146:[USACO20FEB]Help Yourself G
原题传送门把线段按照左端点排序然后令dpidp_idpi表示第iii条线段为止的答案dpi=2∗dpi−1+2kdp_i=2*dp_{i-1}+2^kdpi=2∗dpi−1+2kkkk表示之前有多少条线段与自己没有交,这个可以用树状数组维护一下Code:#include <bits/stdc++.h>#define maxn 100010#define LL long longusing namespace std;const LL qy = 1000000007;L原创 2020-09-27 19:27:33 · 241 阅读 · 0 评论 -
【题解】LuoGu1438:无聊的数列
原题传送门区间加等差数列,单点求和,可以用树状数组维护开两个树状数组,第一个维护和,第二个维护deltadeltadelta魔改暴力加等差数列的方式,用树状数组只加lognlognlogn个地方,但我需要保存deltadeltadelta,求和的时候,累计和与k∗deltak*deltak∗delta,这个kkk就是实际意义上的要求的第xxx个数和当前的差懂了具体操作之后,就知道如何更新了update(l,k,d),update(r+1,−k−(r−l+1)∗d,−d)update(l,k,d),原创 2020-09-08 21:22:29 · 201 阅读 · 0 评论 -
【题解】LuoGu6007:[USACO20JAN]Springboards G
原题传送门显然可以枚举提到过的点若一个点iii,是一个跳板的终点,那么dpi=dpj(j是该跳板的起点)dp_i=dp_j(j是该跳板的起点)dpi=dpj(j是该跳板的起点)一般地,有dpi=min(dpj+dis(i,j))(dis(i,j)=xi+yi−xj−yj)dp_i=min(dp_j+dis(i,j))(dis(i,j)=x_i+y_i-x_j-y_j)dpi=min(dpj+dis(i,j))(dis(i,j)=xi+yi−xj−yj)这是个O(n2)O(n^2)O(原创 2020-09-06 11:15:21 · 296 阅读 · 0 评论 -
【题解】CF538F:A Heap of Heaps
原题传送门按照权值从小到大排序找的是儿子中小于自己的有几个,这样我们就顺着枚举,满足权值递增,用树状数组维护个数,对于一个xxx,kkk叉树,儿子区间为[xk+1−k,xk+1][xk+1-k,xk+1][xk+1−k,xk+1]注意要稳定排序Code:#include <bits/stdc++.h>#define maxn 200010using namespace std;struct data{ int val, id;}a[maxn];int tree[maxn],原创 2020-09-02 20:21:53 · 222 阅读 · 0 评论 -
【题解】NOIp模拟:密码
题面考虑贪心逐位确定,比如对于第一位,先看看最近的aaa可不可以移动到当前位置上,可以就移动,否则就看看最近的bbb可不可以,以此类推如果最近的aaa确定为当前位上的字符,那么我们确定后面一位的时候,这个aaa不能用了,需要看第二近的aaa,这个需要用模拟链表实现对于判断这个字符时候能在限制步数下移动到当前位,可以用树状数组维护这个字符前面还剩多少字符Code:#include <bits/stdc++.h>#define maxn 100010#define int long l原创 2020-08-24 14:58:04 · 162 阅读 · 0 评论 -
【题解】LuoGu3871:[TJOI2010]中位数
原题传送门用两个堆维护较小的那部分用大根堆,较大的那部分用小根堆每次保证大根堆中数的个数s1s1s1与小根堆的s2s2s2相比,s1=s2或s1=s2+1s1=s2或s1=s2+1s1=s2或s1=s2+1这样每次输出大根堆的根就行了Code:#include <bits/stdc++.h>using namespace std;int s1, s2, n;priority_queue <int> q1;priority_queue < int, vecto原创 2020-08-12 16:07:54 · 142 阅读 · 0 评论 -
【题解】LuoGu5666:树的重心
原题传送门把重心换成新的根,记为rtrtrt,接着考虑针对,每个u(u!=rt)u(u!=rt)u(u!=rt),被作为重心的次数令sus_usu表示uuu的子树的节点数和,gug_ugu表示uuu的重儿子子树节点数和,SSS表示切断一条边之后,一棵树中有uuu这个点,另一棵没有uuu的树的节点数和若uuu是新树的重心,必须满足(1) 2gx<=n−S2g_x<=n-S2gx<=n−S(2) 2(n−S−sx)<=n−S2(n-S-s_x)<=n-S原创 2020-08-02 21:03:54 · 335 阅读 · 0 评论 -
【题解】LuoGu1966:火柴排队
原题传送门首先可以证明,两列火柴中高度排名相等的火柴必须排在上下相邻的两个证明略然后把第一个序列中的排名映射到第二个序列中然后问题转化,转化成求逆序对数用树状数组Code:#include <bits/stdc++.h>#define maxn 100010#define qy 99999997using namespace std;struct node{ i...原创 2019-11-08 21:12:38 · 201 阅读 · 0 评论 -
【题解】LuoGu2479:[SDOI2010]捉迷藏
原题传送门想到以前做过的pojpojpoj的一道题starsstarsstars(好像是这么叫的)考虑如何把绝对值扔掉对于一个点(x,y)(x,y)(x,y)和它左下的一个点(x1,y1)(x1<=x,y1<=y)(x1,y1)(x1<=x,y1<=y)(x1,y1)(x1<=x,y1<=y),那么两点曼哈顿距离:x−x1+y−y1=(x+y)−(x1+y...原创 2019-09-30 19:20:37 · 182 阅读 · 0 评论 -
【题解】CF91B:Queue
原题传送门非常简单的题目对于每个数,需要找到比自己小的下标最大的数,直接离散化然后开个以权值为下标的树状数组维护一下实际下标最大值就完事了Code:#include <bits/stdc++.h>#define maxn 100010#define _ 0 using namespace std;struct data{ int x, id;}b[maxn];in...原创 2019-08-27 17:42:01 · 323 阅读 · 0 评论 -
【题解】LuoGu4949:最短距离
原题传送门基环树,不是特别的复杂如果先把一条多余的边拿掉,然后对于每个询问最短路径不经过多余边,直接树上求两点间距离最短路径经过多余边,树上求多余边两端点分别到两个询问点的距离,加上多余边长度两种情况比大小即可至于如何求得树上两点间距离,因为有修改操作无法直接倍增解决所以用上树剖,然后距离可以用常数更小的树状数组维护一下Code先鸽着...原创 2019-08-13 08:18:49 · 241 阅读 · 0 评论 -
BZOJ5442:[Ceoi2018]Global warming
原题传送门从头开始跑一遍最长上升从尾开始跑一遍最长下降把头尾信息综合起来如何综合,我采用树状数组维护最值,先用二分查找到当前数对应的地方,然后更新整个代码我用了三只树状数组,麻烦的一点是需要离散化,由于我马力不够一个细节点没处理好wa了一发Code:#include <bits/stdc++.h>#define maxn 200010#define LL long l...原创 2019-08-21 09:50:44 · 239 阅读 · 0 评论 -
【题解】绍兴一中-7.20-T3
传送门怎么说呢,这道题目其实不是很难,按照luogu的评级,有紫题的难度适中的那种思维上其实一般,难的在细节处理,但是我考试时没有想出来正解,只是因为没有花时间在这上面,T3嘛,默认做不出来的,更何况T1是树状数组,谁会想到T3还是树状数组?70%按照R从大到小插入,每次看看找H比他大的中最小的那个H做他的“外套”,模仿最长不下降子序列求法时间复杂度O(Qnlogn)O(Qnlogn)O...原创 2019-07-21 10:37:23 · 173 阅读 · 0 评论 -
【题解】POJ2352:Stars
原题传送门 Description Astronomers often examine star maps where stars are represented by points on a plane and each star has Cartesian coordinates. Let the level of a star be an amount of the stars that...原创 2018-08-10 20:19:23 · 384 阅读 · 0 评论 -
【学习笔记】树状数组
有一种数组叫树状数组 树状数组,对于每一个点,它有一个管辖区域 具体是这样的: (摘自BaiDu)然后发现对于x,它所包含了x-lowbit(x)+1~x 这个lowbit(x)表示2^k(k为x二进制末尾连续0的个数) 这个lowbit怎么求呢?lowbit(x)=x&-x讲解一下树状数组各部分的作用: change(x,y):表示把x~n这个区间的信息与y综...原创 2018-08-07 20:28:58 · 261 阅读 · 0 评论 -
【题解】BZOJ3594:[Scoi2014]方伯伯的玉米田【DP+二维树状数组优化】
uses math;var a:Array[0..10000] of int64; dp:array[0..10000,0..500] of int64; n,m,i,j,k,l:longint;begin readln(n,m); for i:=1 to n do read(a[i]); for i:=1 to n do for j:=m downto 0 do for k:=0 to i-1 d原创 2018-07-31 21:14:08 · 337 阅读 · 0 评论 -
【学习笔记】浅谈线段树与树状数组
这是两种类似的算法 这是两种O(n^2)->O(nlogn)的算法这两种算法有区别树状数组支持:单点修改(+-*/,维护最值)区间修改(+-,维护最值) 注意:树状数组覆盖的区间不灵活,只能前缀或后缀,值的变化还好说,维护区间最值的话就很伤了,但这篇题解宽了我的思路,说明要做到树状数组维护区间最值可以浪费点时间线段树支持:单点修改(+-*/,维护最值)区间修...原创 2018-08-07 21:35:33 · 764 阅读 · 0 评论 -
【学习笔记】最长不下降子序列
题目 给定一个长为n(1≤n≤100000)的正整数(最大为2^31-1)序列,求最长不下降子序列的长度.Sample inupt 7 1 3 3 6 8 3 6Sample output 5博主自己随便弄的一道题目 这里我讲四种方法1、普通DP时间复杂度O(n^2),用在此题会Tle,普通DP在本博文视为暴力~~ dp[i]表示以第i个数结尾的...原创 2018-08-08 21:59:29 · 980 阅读 · 0 评论 -
【题解】LuoGu4113:[HEOI2012]采花
原题传送门 @BZOJ Description 萧芸斓是Z国的公主,平时的一大爱好是采花。今天天气晴朗,阳光明媚,公主清晨便去了皇宫中新建的花园采花 。花园足够大,容纳了n朵花,花有c种颜色(用整数1-c表示),且花是排成一排的,以便于公主采花。公主每次 采花后会统计采到的花的颜色数,颜色数越多她会越高兴!同时,她有一癖好,她不允许最后自己采到的花中,某 一颜色的花只有一朵。为此,公主...原创 2018-09-10 21:00:14 · 265 阅读 · 0 评论 -
【题解】LuoGu3660: [USACO17FEB]Why Did the Cow Cross the Road III G
原题传送门题目背景给定长度为2N的序列,1~N各处现过2次,i第一次出现位置记为ai,第二次记为bi,求满足ai<aj<bi<bj的对数输入样例432441321输出样例3【题解】树状数组以a数组为关键字,从小到大排序,满足ai<aj排好序后,线扫一遍,根据ai<aj<bi<bj,每次在答案里累加query(b[i]-1...原创 2018-09-21 14:20:35 · 302 阅读 · 0 评论 -
【题解】LuoGu2161: [SHOI2009]会场预约
原题传送门题目描述PP大厦有一间空的礼堂,可以为企业或者单位提供会议场地。这些会议中的大多数都需要连续几天的时间(个别的可能只需要一天),不过场地只有一个,所以不同的会议的时间申请不能够冲突。也就是说,前一个会议的结束日期必须在后一个会议的开始日期之前。所以,如果要接受一个新的场地预约申请,就必须拒绝掉与这个申请相冲突的预约。 一般来说,如果PP大厦方面事先已经接受了一个会场预约,例如从10日...原创 2018-10-25 16:16:44 · 212 阅读 · 0 评论 -
【题解】LuoGu3787:冰精冻西瓜
原题传送门题目描述琪露诺是拥有操纵冷气程度的能力的妖精,一天她发现了一片西瓜地。这里有n个西瓜,由n-1条西瓜蔓连接,形成一个有根树,琪露诺想要把它们冷冻起来慢慢吃。这些西瓜蔓具有神奇的性质,可以将经过它的冷气的寒冷程度放大或缩小,每条西瓜蔓放大/缩小冷气寒冷程度的能力值为Wi,表示冷气经过它后,寒冷程度值x会变为x*wi。每个西瓜也有一个寒冷程度值,炎热的夏日,所有西瓜的寒冷程度值初始都...原创 2019-02-11 22:13:34 · 536 阅读 · 0 评论 -
[题解]LuoGu2263:命运的彼方
原题传送门题目大意:一串长度为n的数,进行一次操作可将其中一个数+1或-1,问最少进行多少次操作,使得数列中有一段长度为k,且大小相同的数思路:先考虑如何进行最少次的操作可将一串长度为k的数变成大小相同显然是将这段数的大小都变成中位数,可是操作数最少比如1 2 3,若把数都变成3,则需要3-1+3-2=3次操作;若把数变成2(中位数),则需要3-2+2-1=2次操作所以现在考虑如何...原创 2019-03-07 21:08:52 · 242 阅读 · 0 评论 -
[学习笔记]莫队->树状数组
ps:本博纯属博主自己瞎搞例:给定长为n的一列数,以及q个询问(l,r),要求输出al…ar中有多少个不同的数不要求在线洛谷原题离线算法,显然莫队,然而,本题卡莫队先上一发莫队的TLE代码:#include <bits/stdc++.h>#define maxn 500010using namespace std;struct node{ int a, b, i...原创 2019-03-31 18:09:36 · 1136 阅读 · 1 评论 -
[题解]hdu Cube
CubeProblem DescriptionGiven an NNN cube A, whose elements are either 0 or 1. A[i, j, k] means the number in the i-th row , j-th column and k-th layer. Initially we have A[i, j, k] = 0 (1 <= i, j...原创 2019-04-09 20:34:56 · 248 阅读 · 0 评论 -
【题解】LuoGu3372:【模板】线段树 1【两解】
题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某区间每一个数加上x 2.求出某区间每一个数的和 输入输出格式 输入格式: 第一行包含两个整数N、M,分别表示该数列数字的个数和操作的总个数。 第二行包含N个用空格分隔的整数,其中第i个数字表示数列第i项的初始值。 接下来M行每行包含3或4个整数,表示一个操作,具体如下: 操作1: 格式:1 x y k 含义:将区间[...原创 2018-08-05 16:41:19 · 295 阅读 · 0 评论