
线段树
文章平均质量分 52
a1s4z5
这个作者很懒,什么都没留下…
展开
-
spoj SPOJ 1043 Can you answer these queries I
犹记得最大子序列和有一个递归算法就是对于每个区间,把它分为左右两个区间,并保存四个值(从左边第一个元素开始往右能达到的最大值(lmax),从右边第一个元素开始往左能达到的最大值(rmax),区间和(sum),最大子区间和(value))显然对于这个区间的最大值只有三种可能,左区间的最大和,右区间的最大和,从中间分开,左区间的rmax+右区间的lmax这样的话维护的这四个值是满足区间加法原创 2015-11-21 14:44:43 · 669 阅读 · 0 评论 -
Hdu 5828 Rikka with Sequence
#include<bits/stdc++.h>using namespace std;#define LL long longstruct Info{ LL same,siz,sum; Info(LL x = 0){ same = sum = x; siz = x!=0; } void add(LL x){ sum +原创 2016-08-11 21:54:47 · 377 阅读 · 0 评论 -
Hdu 5861 Road
考虑到每一个线段只有一次进入答案的机会和离开答案的机会用线段树求得每个线段进入答案和离开答案的机会暴力计算即可实践复杂度 O(n×log(m)+n)O(n \times log(m) + n)#include<bits/stdc++.h>using namespace std;const int maxn = 212345;int arr[maxn * 4];#define root 1,1,n原创 2016-08-19 10:41:02 · 551 阅读 · 0 评论 -
hdu 5716 GCD
一句话题面,询问区间GCD和区间GCD等于所询问的区间GCD的区间个数数的个数1e5,数的大小1e9区间GCD满足区间加法,所以线段树搞搞就好了关于第二个询问,需要实现预处理GCD 为x的区间的个数具体的,考虑固定左端点的情况,不难发现gcd是随着区间长度的增加而递减的,形象的来说就是一些线段(不妨设为(g,length),其中g代表的是左端点固定时候右端点在这个线段中时的区间gcd,length代原创 2016-07-20 12:59:58 · 473 阅读 · 0 评论 -
hdu 1698 Just a Hook
hdu 1698 Just a Hook一个简单的线段树支持把某个区间内的点都改为z,求所有操作之后的区间和#include<bits/stdc++.h>using namespace std;const int maxn = 112345;int arr[maxn * 4];int lazy[maxn * 4];#define root 1,1,n#define lson o<<1,l,m原创 2016-05-03 15:37:18 · 272 阅读 · 0 评论 -
Astar Round2A 1003 Snacks
将树按照dfs序映射到区间上,每个点的值代表这个点到根的路径上的点权和因为子树的dfs序连续,所以查询其实就是查询区间最大值更新的话就是给区间加一个数(因为更新了x的点权的时候会对它的子树中的所有点有影响这一些都可以用线段树维护具体见代码#include<cstdio>#include<vector>#include<cstring>#include<iostream>#include<qu原创 2016-05-22 20:51:56 · 251 阅读 · 0 评论 -
hdu 5238 Calculator
某线段树打模拟赛的时候不知道区间该维护什么东西使其变得可合并,然后就放着了赛后看了题解才知道这个题维护的是映射关系,感觉也是十分的厉害考虑一个算式a+4(mod7)=ba + 4 \pmod{7} = b我们发现来(mod7)\pmod{7}的同余系中,会有以下对应关系其实这就是一个映射具体的,保存这个映射可以直接开一个数组a[7],其中a[i]=(i+4)(mod7)a[7],其中a[i] =原创 2016-05-19 20:09:54 · 403 阅读 · 0 评论 -
hdu 4288 Coder
线段树单点更新,查询总的区间下标(mod5)=3\pmod{5}=3的数的和先离散化一下然后每个区间存一下这个区间下标(mod5)=k(0≤k≤5)\pmod{5}=k(0\le k\le5)的数的和,这个区间数的个数区间合并的时候考虑左区间数的个数然后怼起来就好了,具体见代码 #include<bits/stdc++.h>using namespace std;#define LL long原创 2016-05-18 15:47:11 · 275 阅读 · 0 评论 -
hdu 4578 Transformation
线段树支持给区间加cc,区间乘cc,区间的数都变成cc询问∑i=lrxi\sum\limits_{i=l}^rx_i,∑i=lrx2i\sum\limits_{i=l}^rx_i^2,∑i=lrx3i\sum\limits_{i=l}^rx_i^3写了4K的线段树。。区间节点维护区间和,区间平方和,区间立方和,顺便记录一下区间内数字的个数sizsiz然后对于给区间加cc和给区间乘cc的两个操作,我们原创 2016-05-18 13:44:24 · 407 阅读 · 0 评论 -
bzoj 1858 序列操作
有毒的线段树一个01序列,支持以下操作 0 a b 把[a, b]区间内的所有数全变成0 1 a b 把[a, b]区间内的所有数全变成1 2 a b 把[a,b]区间内的所有数全部取反,也就是说把所有的0变成1,把所有的1变成0 3 a b 询问[a, b]区间内总共有多少个 1 4 a b 询问[a, b]区间内最多有多少个连续的 1 先不考虑操作3线段树的节点要维护从左端点开原创 2016-05-17 00:06:13 · 355 阅读 · 0 评论 -
bzoj 3626 LCA
已经有写的很好的题解了在这里就放一个代码吧这样的题交上去1A的快感真是让人沉迷于此(逃(第一发的CE不算#includeusing namespace std;const int maxn = 52345;const int mod = 201314;const int ROOT = 0;int n;vector edge[maxn];void init原创 2016-04-27 14:51:50 · 331 阅读 · 0 评论 -
Poj 3694 Network
一句话题意:求一个无向联通图的桥的个数,动态加边原创 2016-02-24 10:10:27 · 340 阅读 · 0 评论 -
Poj 2750 Potted Flower
普通的线段树 题面:一个环上每一个点都有一个权值,要求支持单点更新,查询最大连续子序列和 ps:查询的时候子序列的大小不能超过n,也就是不能把所有的数都选起来如果不是环上,是区间上的话,这题就解决了(如果不知道怎么做的话,看这里这个题和之前的那个题差别在于这题是一个环上的(废话! 如果要特判的话,那人生也太可悲了 如果换一个角度呢,也就是说我们考虑如果所求的区间是从1和n这两个地方穿过的原创 2016-03-17 18:32:15 · 374 阅读 · 0 评论 -
Poj 2886 Who Gets the Most Candies?
一个简单的线段树上二分+反素数线段树上二分其实就是单点更新单点查询具体的每一个节点保存他的所表示的区间内剩余的未出对的人数然后给出一个人在队伍中的位置的话可以类似于splay往下找点的姿势去找到位置所对应的绝对位置(其实也就是这个节点在原区间所对应的位置还有需要注意的是在删除一个点之后往前走和往后走是需要分开处理的,考虑这个点后面的点的位置都往后挪了一位然后反素原创 2016-03-16 19:44:31 · 282 阅读 · 0 评论 -
Hdu 5221 Occupation
算是一个简单的树剖+线段树(不过话说回来树剖也是经常和线段树一起(这个题应该叫做线段树在树上的简单应用(Orz感觉自己的线段树(特别是区间更新这个地方)还是很不熟练(观看下文需要一些简单的线段树知识,包括但不限于线段树的定义)如果不考虑树上的部分的话,这个题要求我们维护一个区间,其中区间中的每一个点都有一个标记和一个value,刚开始的时候,标记都是false1 将原创 2015-12-01 11:40:58 · 377 阅读 · 0 评论 -
Hdu 5316 Magician
求区间奇偶交错最大子序列线段树模板题单点更新,区间查询就是区间合并的时候麻烦一点点,但是也不难代码如下#include#include#includeusing namespace std;#define LL long longconst long long INFF = 0x3f3f3f3f3f3f3f3fll;struct Info{原创 2015-11-18 12:46:28 · 336 阅读 · 0 评论 -
Spoj 1716 Can you answer these queries III
(几乎一样的题和几乎一样的代码#include#include#includeusing namespace std;const int maxn = 112345;#define LL long longconst LL INFF = 0x3f3f3f3f3f3f3f3fll;struct Info{ LL lmax,rmax,sum,val; v原创 2015-11-21 14:46:32 · 291 阅读 · 0 评论 -
UVA 1728 Toll Management IV
一个n(n≤104)n(n \le 10^4)个点m(m≤105)m (m \le 10^5)条带权(0≤Ci≤1000)(0 \le C_i \le 1000)边的无向图,给出原图的一个最小生成树(输入的前n−1n-1条边)对于第ii条边,定义AiA_i和BiB_i为在不改变最小生成树形态下增加和减少的最大的值求 ∑i=1mAi×i+Bi×i×i\sum\limits_{i=1}^m A_i \t原创 2016-09-23 15:08:04 · 488 阅读 · 0 评论