随笔分类 -  数据结构

1
摘要:VJ的链接:https://cn.vjudge.net/problem/Gym 101908L 题目大意: 一棵n个点的树上,查询a ~ bc ~ d两段路径公共的点的个数。 解题思路: 读完题就感觉是树链剖分的裸题呀... 树链剖分可以在O(logN)的时间内维护树上任意 阅读全文
posted @ 2018-10-18 17:51 Apale 阅读(254) 评论(2) 推荐(0) 编辑
摘要:题目链接:https://nanti.jisuanke.com/t/31714 题意 :一棵树,n个点,初值均为0,有四个操作: 1 u v x 把u v路径上所有点乘以x 2 u v x 把u v路径上所有点加上x 3 u v 把u v路径上所有点的... 阅读全文
posted @ 2018-09-17 15:53 Apale 阅读(121) 评论(0) 推荐(0) 编辑
摘要:Splay,中文名伸展树,是由tarjan大神发明的… orz 本质上就是BST加上splay操作——把结点x旋转到指定结点的下面。 每次查询完都把查到的数旋转到根,就可以让所有查找的时间效率为均摊O(logN) (不知道为啥…大佬说是就是吧orz)因为Sp... 阅读全文
posted @ 2018-09-06 19:52 Apale 阅读(119) 评论(0) 推荐(0) 编辑
摘要:Treap = Tree + heap,Tree是BST,即同时维护二叉查找树和堆的性质 Treap的定义:int ch[maxn][2], val[maxn], siz[maxn], num[maxn], pri[maxn];//此处优先级用了小根堆int... 阅读全文
posted @ 2018-09-05 23:29 Apale 阅读(158) 评论(0) 推荐(0) 编辑
摘要:一般线段树做区间修改操作时,先是找到目标区间,然后修改该区间,并打下延迟标记,最后从目标区间自底向上,更新所有包含目标区间的区间的值(即pushup)。当该区间子节点被访问前,pushdown下推标记。 这种维护区间的方式存在一点点弊端。例如用这种方式写一棵... 阅读全文
posted @ 2018-08-27 20:24 Apale 阅读(235) 评论(0) 推荐(0) 编辑
摘要:最近在学splay,就用这道题来记一下模板。splay是二叉搜索树,满足中序遍历有序的性质;同时,splay操作可以在不改变中序序列的前提下改变树的结构。因此,splay可以十分方便地维护区间信息。#includeusing namespace std;co... 阅读全文
posted @ 2018-08-27 14:18 Apale 阅读(140) 评论(0) 推荐(0) 编辑
摘要:题意: 有一个长度为n的数组a,初值均为0,有m组修改,由题目给的一个随机函数生成l, r, v,把a在区间 [ l , r ] 中小于v的值修改为v,最终输出 ⨁i=1n" role="presentation" style="positio... 阅读全文
posted @ 2018-08-09 00:50 Apale 阅读(79) 评论(0) 推荐(0) 编辑
摘要:题目链接: hdu6315 题目大意: 输入一个n,下一行输入一个长度为n的数组b,b是1到n的一种全排列,还有一个长度为n初值全为0的数组a 两种操作: 1) 输入add l r ,将al" role="presentati... 阅读全文
posted @ 2018-07-26 11:21 Apale 阅读(84) 评论(0) 推荐(0) 编辑
摘要:#includeusing namespace std;const int maxn = 100000+10;int N,M,R,P,w[maxn];struct{ int to,next; }e[maxnsiz[son[u]]) ... 阅读全文
posted @ 2018-07-24 23:52 Apale 阅读(109) 评论(0) 推荐(0) 编辑
摘要:题意:三种操作,0 e 表示插入一个数字e,1 e 表示删除一个数字e,2 e k 表示查询比e大的第k个数,删除和查询均可能没有目标。思路:建一棵权值线段树,维护每个数字区间中数字的数量。 查询时,先查出1到e的数字数量n,然后查询第k+n大。#inclu... 阅读全文
posted @ 2018-07-18 20:44 Apale 阅读(304) 评论(0) 推荐(1) 编辑
摘要:题意: 输入N个数字,查询区间[L,R]中有多少个不同的数字(第i个数字为a[i])思路:要维护的是不同的数字的数量,所以每个数只记最后出现的那一次。对N个位置每个位置建一棵线段树,线段树维护的是插入a[i]后树上各区间数字的数量。如果a[i]这个数字在前面... 阅读全文
posted @ 2018-07-18 20:37 Apale 阅读(138) 评论(0) 推荐(0) 编辑
摘要:老板与员工之间是树形关系。每次给一个员工下达任务就是修改这个员工为根的子树。 用dfs序把每一棵子树转化成一个区间,用线段树维护,T就是区间更新维护lazy,C就是单点查询。#include using namespace std;const int max... 阅读全文
posted @ 2018-07-09 19:53 Apale 阅读(125) 评论(0) 推荐(0) 编辑
摘要:离散化: 对数组排完序后用unique去重,unique返回的是去重后的数组的末地址,减去第一个元素的地址就能得到去重后的数组大小,用lower_bound查找原数字在排序去重后的序列中的位序,用位序代替数字完成离散化。#include#includ... 阅读全文
posted @ 2018-07-09 13:48 Apale 阅读(112) 评论(0) 推荐(0) 编辑
摘要:#include#include#includeusing namespace std;#define lson l,m,rt>1); ms[rt>1; } lazy[rt] = -1; }}void ... 阅读全文
posted @ 2018-07-06 23:16 Apale 阅读(114) 评论(0) 推荐(0) 编辑
摘要:今天课上学的堆排序。#includeusing namespace std;void HeapAdjust(int a[],int i,int len){ if(i>len/2)//大于len/2的是叶子结点,不用调整 return ;... 阅读全文
posted @ 2018-06-22 22:18 Apale 阅读(126) 评论(0) 推荐(0) 编辑
摘要:#define lson l,m,rt>1; build(lson); build(rson); pushup(rt);}void pushdown(int l,int r,int rt){ if(lazy[rt]) { ... 阅读全文
posted @ 2018-05-16 17:19 Apale 阅读(96) 评论(0) 推荐(0) 编辑
摘要:思路:先序序列的每个元素代表一个根节点,这个元素在中序序列中左边的部分就是它的左子树,右边部分就是它的右子树代码如下(求树深度的部分是多余的):#includeusing namespace std;int N;string xian,zhong;struc... 阅读全文
posted @ 2018-05-14 16:29 Apale 阅读(767) 评论(0) 推荐(0) 编辑
摘要:Painting some colored segments on a line, some previously painted segments may be covered by some the subsequent ones. Your task ... 阅读全文
posted @ 2018-05-10 11:10 Apale 阅读(135) 评论(0) 推荐(0) 编辑
摘要:struct Node{ int cnt; Node *next[26]; bool exist; Node() { cnt = 0; memset(next,0,sizeof(next)); ... 阅读全文
posted @ 2018-03-30 00:38 Apale 阅读(113) 评论(0) 推荐(0) 编辑
摘要:#include#include#includeusing namespace std;typedef long long ll;ll t[100005>1; build(l,m,rt=L&&r>1; pushdown(rt,m-l+1,r-m)... 阅读全文
posted @ 2018-03-28 12:39 Apale 阅读(96) 评论(0) 推荐(0) 编辑

1
点击右上角即可分享
微信分享提示