线段树和树状数组
线段树和树状数组
_hunxuewangzi
这个作者很懒,什么都没留下…
展开
-
CSUST 4005 你真的会!题解(线段树维护区间合并)
题目链接题目大意题目思路看这个修改就知道与线段树有关,但是比赛的时候看到这个式子直接就放弃了,其实感觉是一个水题,首先假设两个区间的的∑i=1i=r−l+1Si\sum_{i=1}^{i=r-l+1}S_i∑i=1i=r−l+1Si的值分别是x,y那么他们合并之后的值就是xy+x+y(自己可以思考一下),然后你线段树维护的值一般就是答案所要的值,那么两个区间分别所维护的值为x+1,y+1,而他们合并的区间所维护的值就是xy+x+y+1,那么很显然合并的公式就是 tree[node]=tree[n原创 2020-08-15 15:33:33 · 125 阅读 · 0 评论 -
CSUST 2013 丢手绢 题解(线段树)
题目链接题目思路就是用线段树维护答案,可以把每个点当作次大值和次小值的贡献,然后往左往右找最大值和最小值,如果要更新就更新这个点距离k的元素。注意不要写查询函数,因为是查询总区间,直接tree[1]就行了。有点口胡,实在不好表示代码#include<set>#include<map>#include<queue>#include<stack>#include<cmath>#include<cstdio>#includ原创 2020-07-28 15:21:55 · 137 阅读 · 0 评论 -
CSUST 上场最简单题 题解(线段树)
题目链接题目大意从左到右选三道题,要求难度递增,求花费时间的最小值。题目思路emm,对于这种题目,看到三个值,其实就想要枚举中间值,然后这个又是类似于逆序对。以难度值为节点编号 ,时间为节点值,然后边找边更新,左右都来一次就好了。代码#include<set>#include<map>#include<queue>#include<stack>#include<cmath>#include<cstdio>#in原创 2020-07-27 16:11:54 · 140 阅读 · 0 评论 -
HDU 4747 Mex 题解(思维+线段树)
题目链接题目大意定义mex(i,j)mex(i,j)mex(i,j)为序列中第i项到第j项中没有出现的最小自然数。给定序列,求∑i=1n∑j=ij=nmex(i,j)。\sum_{i=1}^{n}\sum_{j=i}^{j=n}mex(i,j)。∑i=1n∑j=ij=nmex(i,j)。题目大意根本没什么思路qwq,这个题目好难啊qwq,写代码都写了2h30min。首先我们可以O(n)预处理出mex(1,1∼n) for(int i=1,val=0;i<=n;i++){//预处理[1,原创 2020-07-24 21:38:56 · 487 阅读 · 0 评论 -
POJ 2777 Count Color题解(线段树染色)
题目链接题目大意L个球,T种颜色,O次操作,初始每个球颜色为1, C为修改a,b区间的颜色为c, P表示询问a,b区间的颜色种数。注意a可能大于b题目思路感觉其实是个简单题,看到颜色种类这么少,直接用二进制表示就可以了,好像还可以建30棵线段树,感觉这样也行代码#include<set>#include<map>#include<queue>#include<stack>#include<cmath>#include<c原创 2020-07-24 16:42:38 · 184 阅读 · 0 评论 -
牛客 Optimal Milking 题解(线段树维护区间合并)
题目链接题目大意给出一个n(n≤4e4)个数的数列{an}(ai≥1)。一个数列的最大贡献定义为其中若干个不相邻的数的和的最大值。进行m(m≤5e4)次操作,每次修改数列中的一个数并询问此时的最大贡献。题目思路看到题目,如果这个题不修改,那么就是一个简单的dp,然而他要修改,所以我只会暴力的o(n*m)题解看的我生活不能自理,居然是线段树维护区间合并。。可能是我以前写的线段树都太简单了吧...原创 2020-05-04 15:49:46 · 162 阅读 · 0 评论 -
集训队选拔赛 恶心心的题(线段树)
题目链接题目思路前言比赛的时候,其实自己已经想到了和答案一样的思路,但是却没写,实属不该。观察a[i]<=300其实我就知道肯定是要质因数分解。码力还要加强正文分析一下,答案就是所有数质因数分解,每一个质数的最大次数。然后乘起来即可。注意z是1e9,他分解质因数,不只是前300中的质数,所以最后还要乘以z用st表要注意被卡空间了,所以要用short int如果利用 线段树,会发...原创 2020-04-27 12:40:18 · 164 阅读 · 0 评论 -
AtCoder Beginner Contest 157 E - Simple String Queries (线段树+二进制 or 二维树状数组 or set+二分)
题目链接题目大意题意:有一个长度为N的字符串(只包含小写字母)。现有Q个操作,操作1是把第x位的字符改成y,操作2是查询[l,r]内去重后有多少个字符。前记这个题目个人认为很有研究的必要。我将用三个方法来写这题线段树+二进制首先看到单点操作和区间查询,很容易想到线段树操作。但是一直没想出,后面看别人代码明白可以用二进制操作。把a−z用0−25表示,再把他们用二进制位表示,就可以用或...原创 2020-03-26 14:42:05 · 305 阅读 · 0 评论 -
周赛 厂里田径赛 题解(线段树)
题目链接题目大意其实就是找前面有多少个比他小的数题目思路显然要用线段树,是裸的线段树,但是不知道为什么自己却一点思路都没有。对于能力值建立一颗线段树or 树状数组, 按编号从小到大枚举每个运动员,每次先查询当前能力值在[1,a[i]-1] 的人数及第i个人的结果,然后再将这个人的能力值更新进去(让能力值为a[i]的人数+1).注意询问的时候要加一句 if(L==R) return 0...原创 2020-03-10 11:50:49 · 132 阅读 · 0 评论 -
POJ T2528 Mayor's posters 题解(线段树和离散化)
题目链接题目大意其实就不是不停的张贴海报,可能后面的海报可以把前面的海报覆盖,求最后能看到多少张海报(只要没有被全部覆盖就算可以看见)题目思路此题是线段树区间覆盖问题,显然数据过大,故要离散化。还有此题根本没有必要进行建树的操作,最开始都是0。易错警示1:此题有一个坑点。如 1,10 1,4 7,10 这三组数的正确结果应该是还以看到3种颜色,但是如果直接排列点的话就会挤掉...原创 2020-02-26 14:41:31 · 133 阅读 · 0 评论