树之线段树
oranges_c
落寞是岁月的痕迹
展开
-
【HDU5828】Rikka with Sequence(线段树)
记录一个菜逼的成长。。参考博客: http://blog.csdn.net/xtttgo/article/details/52184771无限T之后,参考了上面的博客。终于过了。。#include <cstdio>#include <iostream>#include <cstring>#include <string>#include <algorithm>#include <cstd原创 2016-08-13 20:23:10 · 404 阅读 · 0 评论 -
【HDU3966】Aragorn's Story(树链剖分+线段树)
树链剖分用一句话概括就是:把一棵树剖分为若干条链,然后利用数据结构(树状数组,SBT,Splay,线段树等等)去维护每一条链,复杂度为O(logn)那么,树链剖分的第一步当然是对树进行轻重边的划分。定义size(x)为以x为根的子树节点个数,令v为u的儿子中size值最大的节点,那么(u,v)就是重边,其余边为轻边。当然,关于这个它有两个重要原创 2017-02-03 17:00:38 · 433 阅读 · 0 评论 -
2017浙理工校赛重现-H.玩具(尺取+RMQ)
题目链接就是枚举区间,rmq查询区间最大值。ps:跟暴力程序对拍了下才发现查询函数写错了。。#include <cstdio>#include <iostream>#include <cstring>#include <algorithm>using namespace std;#define cl(a,b) memset(a,b,sizeof(a))#defin原创 2017-03-22 15:28:08 · 238 阅读 · 0 评论 -
【HDU4991】Ordered Subsequence(离散化+dp+树状数组)
题目链接 题目大意: 给你n个数的序列,问长度为m的严格上升子序列有多少个。答案对123456789取模 (n≤10000,m≤100)(n\leq10000 , m\leq100)有一个暴力dp dp[i][j]dp[i][j] :=表示以第i个数结尾,上升子序列长度为j的个数 如果a[k] < a[i] dp[i][j]+=dp[k][j−1]dp[i][j]原创 2017-04-20 20:47:51 · 280 阅读 · 0 评论 -
【BZOJ3289】Mato的文件管理(莫队算法+树状数组)
题目链接题目要求交换次数,其实就是逆序数。 求逆序数,用树状数组来求。 题目没说数据范围,则离散化处理一下考虑莫队算法 已知区间[l,r]\left[l,r\right]的交换次数SS1求[l,r+1]\left[l,r+1\right]的交换次数假设a[r+1]=xa[r+1] = x 这个和一般的逆序数求法一样,更新树状数组,求和。 update(Rank[x]原创 2017-04-27 16:38:31 · 257 阅读 · 0 评论 -
zkw线段树
网上好多zkw线段树版本都是错的。。坑啊。 主要是连zkw的ppt上都是不完整和有错误的。统计的力量结点信息struct Node{ int sum,mx,mn;}T[maxn<<2];int M,a[maxn];建树void build(int n){ for( M = 1; M <= n+1; M <<= 1); for( int i = M + 1;原创 2017-06-22 16:02:29 · 580 阅读 · 0 评论 -
Codeforces 816 -B. Karen and Coffee
题目链接题目大意: n区间,q次查询区间 每次查询有多少个点是在n个区间里出现了k次的一开始看到这题想的就是线段树。 后来看到题解和别人的代码,发现,原来还有这种操作?n个区间的处理 给你区间[l,r][l,r] c[l]++,c[r+1]–; 这样能保证前缀和就是这个点的出现次数#include <bits/stdc++.h>using namespace s原创 2017-06-25 18:28:42 · 327 阅读 · 0 评论 -
Codeforces 831-E.Cards Sorting(线段树)
题目链接题目大意:给你一个n(1≤n≤100000)个数的序列,a1,a2,...,an(1≤ai≤100000)循环遍历数组,当当前数是序列里的最小值时删除这个数,问需要遍历多少次才能使数组为空。原创 2017-07-17 12:31:18 · 306 阅读 · 0 评论 -
【HDU6183】Color it(线段树)
Do you like painting? Little D doesn't like painting, especially messy color paintings. Now Little B is painting. To prevent him from drawing messy painting, Little D asks you to write a program to maintain fol原创 2017-09-02 13:54:47 · 1316 阅读 · 2 评论 -
【BZOJ1036】[ZJOI2008]树的统计Count(树链剖分+线段树)
题目链接 Description 一棵树上有n个节点,编号分别为1到n,每个节点都有一个权值w。我们将以下面的形式来要求你对这棵树完成 一些操作: I. CHANGE u t : 把结点u的权值改为t II. QMAX u v: 询问从点u到点v的路径上的节点的最大权值 III. QSUM u v: 询问从点u到点v的路径上的节点的权值和 注意:从点u原创 2017-02-03 18:44:53 · 272 阅读 · 0 评论 -
团体程序设计天梯赛-练习集-L3-002. 堆栈(线段树-区间第k大)
题目链接其实可以套主席树求动态的区间第k大。但是这里规定了范围[1,100000] 我们可以建立一颗线段树,线段树的节点值表示在这个区间内数的出现次数的总和 比如区间为[2,2]的节点的值为2的出现次数 这样相当于对整个栈序列排了个序。 然后我们可以用二分的方法查询区间第k大。 这里的k就是当前栈序列大小的中值#include <cstdio>#include <原创 2017-02-19 18:08:59 · 630 阅读 · 0 评论 -
Codeforces 755-D. PolandBall and Polygon(树状数组+计算几何)
题目链接 题目大意: 给你一个凸n边形。从1开始,将点与接下来的第k个点连条线,然后从第k个点开始重复操作,每次操作输出凸边形有多少块区域。不会有三条线交于一点的情况。我们需要知道每次连线相交了多少条线。 假设现在在x点,那么只需要知道x+1,…,x+k-1和x-k+1,…,x-1有多少条线是以这些点为起点的。因为如果是以这些点为起点的线,那么x’+k肯定会超过x或x+原创 2017-01-18 15:12:03 · 345 阅读 · 0 评论 -
【HDU5875】Function(RMQ)
容易推导:F(l,r) = a[l] % a[l+1] % a[l+2]…% a[r]; 因为模运算,所以只需找右边比当前位置的值小的数,更新位置线段树版本#pragma comment(linker, "/STACK:1024000000,1024000000")#include <cstdio>#include <iostream>#include <cstrin原创 2016-09-22 18:28:01 · 325 阅读 · 0 评论 -
【CSU1809】Parenthesis(线段树 + 贪心 + 前缀和)
题目大意: 给你一个长度为n的匹配的括号序列,有q次询问,每次询问交换a,b的位置,问交换后的序列是否仍然匹配。题解: 这种括号的题目有一种经典的套路就是遇到’(‘加一,遇到’)’减一,这样整个序列最后的前缀和一定是非负的。 贪心一下,判断一下四种情况: 1.2),交换的两个括号是一样的,自然是输出Yes; 3),如果左边是’)’右边是’(‘,更加保证前缀和原创 2016-09-07 18:35:58 · 344 阅读 · 0 评论 -
【HDU5877】Weak Pair(线段树+dfs+离散化)
题目大意: 给你一个有根树,每个节点有权值,如果u是v的祖先,并且a[u] * a[v] <= k则(u,v)是一个虚弱对,求有多少组这样的对。dfs到某一节点时,路径上走过的点都是此节点的祖先。///#pragma comment(linker, "/STACK:1024000000,1024000000")#include <cstdio>#include <ios原创 2016-09-21 16:08:13 · 299 阅读 · 0 评论 -
【玲珑学院OJ1063】Variance(线段树)
比赛的时候看到这题,一看就是经典线段树。。然而方差公式已经还给老师了。。。一脸懵逼。 现在补上。 方差公式D(x) = E(x^2) - E(x)^2; E是平均数 因为本题要求结果乘上(r-l+1)^2 所以ans = (r-l+1)^2 * (E(x^2) - E(x)^2) = (r-l+1)*sigma(x^2) - sigma(x)*sigma(x)(l原创 2016-11-27 10:47:34 · 220 阅读 · 0 评论 -
【POJ2763】Housewife Wind(树链剖分+线段树(基于边权))
题目链接 题目大意: n个点,m个操作,初始位置为s 有两个操作: 1.ope to :输出从s到to的路径长度,并将to赋值给s 2.ope i v :将第i条边的长度改为v基于边权,要将边权转化为点权。 将这条边的值作为这条边两端点深度大的点权即可 接着用线段树维护即可。 PS:差点wa到吐血。。#include <cstdio>#include <cs原创 2017-02-04 15:41:37 · 264 阅读 · 0 评论 -
【POJ3237】Tree(树链剖分+线段树(基于边权))
题目链接 题目大意: 有T组数据 给你n个点的树 有三种操作: 1.CHANGE i v :将第i条边的值改为v 2.NEGATE a b :将a点到b点路径上的边权取反 3.QUERY a b :查询a点到b点路径上最大的边权值由于有取反操作,我们记录最大值的同时记录下最小值 如果要取反,则将最大最小值取反并交换即可 用线段树维护注意懒惰标记原创 2017-02-04 17:18:50 · 484 阅读 · 0 评论 -
【SPOJ】QTREE - Query on a tree(树链剖分+线段树(基于边权))
题目链接 题目大意: 给你n个点树,有两种操作 1.CHANGE i ti :将第i条边的值改为ti 2.QUERY a b :查询a点到b点的路径上的最大值跟上题类似,不过这题还简单点,没有取反操作。 直接套就行了。#include <cstdio>#include <cstring>#include <algorithm>using namespace原创 2017-02-04 17:30:27 · 270 阅读 · 0 评论 -
【POJ2155】Matrix(二维树状数组)
题目链接 题目大意: 给你n*n的矩阵初始为0,有T次操作 两种操作: 1.C x1 y1 x2 y2 修改(x1,y1)到(x2,y2)的子矩阵值,即0变1,1变0 2.Q x y 查询(x,y)的值树状数组有两种应用。跟线段树类似 1.单点修改,区间查询 2.区间修改,单点查询具体的证明及解释戳我#include <cstdio>#include <ios原创 2017-02-08 14:21:34 · 236 阅读 · 0 评论 -
【Wannafly挑战赛10】D.小H的询问(线段树的区间合并)
链接:https://www.nowcoder.com/acm/contest/72/D来源:牛客网小H给你一个数组{a},要求支持以下两种操作:1. 0 l r(1<=l<=r<=n),询问区间[l,r]中权值和最大的有效子区间的权值和,一个子区间被认为是有效的当且仅当这个子区间中没有两个相邻的偶数或者奇数。2. 1 x v(1<=x<=n,-109<=v<=109),将a[x]的值修改为v。原创 2018-02-28 13:50:31 · 449 阅读 · 0 评论