![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
树
oranges_c
落寞是岁月的痕迹
展开
-
【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 · 266 阅读 · 0 评论 -
PAT(A)-1123. Is It a Complete AVL Tree (30)(AVL+bfs)
题目链接题目大意: 给你n个值,建一棵AVLtree,输出这棵树的层序遍历,并问这棵树是否是完全二叉树其实只要搞清楚LL旋转就可以推出其余三种旋转了。 我觉得代码说的还是很清楚的,看具体的代码吧。 还是不懂的话可以参考这里 不过链接里代码有两处有点问题,认真的看的话看的出来的。#include <bits/stdc++.h> using namespace std;原创 2017-03-13 20:01:46 · 260 阅读 · 0 评论 -
PAT(A)-1130. Infix Expression (25)(树的中序遍历)
题目链接题目大意: 给你n个点的值以及左右孩子编号。 输出表达式。遍历的时候,如果是叶子节点的就不需要给左右括号 输出的时候去掉最外面的一对括号。 注意n==1的情况#include <bits/stdc++.h> using namespace std; #define cl(a,b) memset(a,b,sizeof(a)) #define clr clear原创 2017-03-24 13:28:39 · 377 阅读 · 0 评论 -
hiho一下-第104周-平衡树·Splay
题目链接这题可以直接用set做。 这里记下模板。#include <bits/stdc++.h> using namespace std; #define MINK 0 #define MAXK 1000000001 struct Node{ Node *father,*left,*right; int v; Node(int k, Node* f)原创 2017-03-16 18:56:59 · 318 阅读 · 0 评论 -
之江学院第0届校赛-H.qwb与学姐(最大生成树+lca)
题目链接一开始看到这题,想的是最大生成树+树链剖分+线段树。时间复杂度大概是O(mlogm+n+nlogn+klogn)O(mlogm+n+nlogn+klogn) 然而貌似是因为线段树的常数大然后炸了。。(不会zkw线段树,待学。orz然后题解说的是最大生成树+倍增法lca 就是创建一个数组 dis[i][j]:=表示i点跟它的第2j个祖先之间路径的最小值dis[i]原创 2017-06-03 13:54:47 · 395 阅读 · 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 · 582 阅读 · 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 · 328 阅读 · 0 评论 -
Codeforces 831-E.Cards Sorting(线段树)
题目链接题目大意:给你一个n(1≤n≤100000)个数的序列,a1,a2,...,an(1≤ai≤100000)循环遍历数组,当当前数是序列里的最小值时删除这个数,问需要遍历多少次才能使数组为空。原创 2017-07-17 12:31:18 · 308 阅读 · 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 · 1334 阅读 · 2 评论 -
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 · 243 阅读 · 0 评论 -
PAT(A)-1099. Build A Binary Search Tree (30)
题目链接题目大意: 一棵二叉排序树,有n个点,告诉你每个点的左右儿子编号; 给你n个值。 确定每个值所在的位置。输出层序序列。先将值排好序。 从根节点开始递归建树。 每次确定当前点在当前区间排第几,也就是要知道当前点的左子树上有多少个点。搜索一遍即可。#include <bits/stdc++.h> using namespace std; #define fi f原创 2017-03-21 17:41:01 · 217 阅读 · 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 · 501 阅读 · 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 · 276 阅读 · 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 · 237 阅读 · 0 评论 -
团体程序设计天梯赛-练习集-L2-012. 关于堆的判断(小顶堆)
题目链接这里建堆要每输入一个值就插入并且向上调整 在堆顶设置一个哨兵会省点操作 还要注意值有负数,在处理字符串的时候要注意。(之前一直不知道哪里有问题,后来才发现负数忘了处理,一直过不了)#include <cstdio> #include <iostream> #include <cstring> #include <string> #include <algorith原创 2017-02-19 18:01:17 · 968 阅读 · 0 评论 -
团体程序设计天梯赛-练习集-L3-002. 堆栈(线段树-区间第k大)
题目链接其实可以套主席树求动态的区间第k大。但是这里规定了范围[1,100000] 我们可以建立一颗线段树,线段树的节点值表示在这个区间内数的出现次数的总和 比如区间为[2,2]的节点的值为2的出现次数 这样相当于对整个栈序列排了个序。 然后我们可以用二分的方法查询区间第k大。 这里的k就是当前栈序列大小的中值#include <cstdio> #include <原创 2017-02-19 18:08:59 · 638 阅读 · 0 评论 -
【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 · 273 阅读 · 0 评论 -
【HDU3966】Aragorn's Story(树链剖分+线段树)
树链剖分用一句话概括就是:把一棵树剖分为若干条链,然后利用数据结构(树状数组,SBT,Splay,线段树等等)去维护每一条链,复杂度为O(logn)那么,树链剖分的第一步当然是对树进行轻重边的划分。定义size(x)为以x为根的子树节点个数,令v为u的儿子中size值最大的节点,那么(u,v)就是重边,其余边为轻边。当然,关于这个它有两个重要原创 2017-02-03 17:00:38 · 448 阅读 · 0 评论 -
PAT(A)-1127. ZigZagging on a Tree (30)(树的重建)
题目链接题目大意: 给你一颗二叉树的中序和后序。 要你输出指定顺序的序列。又是树的重建。。 输出的序列跟层序差不多,判断一下是否逆序存放就行了。PS:这次春季,水的一匹。。这树的重建出了不知道多少遍。。#include <bits/stdc++.h> using namespace std; #define cl(a,b) memset(a,b,sizeof(a)) #原创 2017-03-07 20:39:55 · 794 阅读 · 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 · 453 阅读 · 0 评论