数据结构
文章平均质量分 72
数据结构
_7许
%
展开
-
HDU 6406 Taotao Picks Apples
线段树查询区间第一个大于val的值的id原创 2021-05-10 17:05:13 · 180 阅读 · 0 评论 -
求解逆序数
两行代码vector求逆序数(冒泡)冒泡排序是保证前面冒完的泡泡是有序的~,所以说,我们可以直接利用这一点,二分找到要插入的数值应该在哪个位置,那么原位置减去当前应该在的位置就是它的逆序数#include <iostream>#include <algorithm>#include <cstdio>#include <vector>usi...原创 2020-03-27 22:34:27 · 260 阅读 · 0 评论 -
CF - 19D【线段树】
D. Points题意:在笛卡尔坐标系上有 n 个操作,添加点 (x, y),删除点 (x, y) 和查询点 (x, y) 的最近的右上角的点 (x1, y1) 【在保证(x1 - x)最小的基础上寻找(y1-y)最小】思路1:横纵坐标的范围很大,所以我们对横纵坐标离散化,然后对离散后的横坐标用线段树维护,线段树维护横坐标 x 对应竖直线上点的个数。我们用 set 存储横坐标 x 对应竖直线上点的集合。点的添加和删除操作直接跑到叶子节点对 set 进行insert或者erase即可。查询点 (x,原创 2020-09-26 10:23:15 · 287 阅读 · 0 评论 -
power oj 2885: 连续段
题目链接题意:给一个长度为 nnn 的排列,m次询问区间 [l,r][l, r][l,r] 的连续段(相邻的数构成连续段,比如1、2、3;2、3、4)的数目。题目强制在线。思路:在区间 [l,r][l, r][l,r] 中,对于区间内任意一个数 xxx 来说,如果它可以作为连续段的起始位,那么它的前驱 x−1x - 1x−1 的位置一定在区间 [l,r][l, r][l,r] 外。所以我们只需要统计,区间内所有元素中前驱的位置在区间 [l,r][l, r][l,r] 外的元素个数,即是连续段的个数原创 2020-09-24 15:44:23 · 246 阅读 · 0 评论 -
【分块+二分】HDU 4417
Super Mario多组数据注意初始化#include <iostream>#include <cstdio>#include <cstring>#include <cmath>#include <vector>#include <algorithm>#define INF 0x3f3f3f3fusing namespace std;typedef long long ll ;int read(){原创 2020-07-08 12:30:21 · 161 阅读 · 0 评论 -
【除法分块】power oj 2886
大力出奇迹∑i=lrx%(k∗i)=∑i=lr(x−(k∗i)∗⌊xk∗i⌋)=x∗(r−l+1)−∑i=lr(k∗i)∗⌊x/ki⌋\displaystyle \sum^{r}_{i=l}{x \% (k*i)}= \displaystyle \sum^{r}_{i=l}{(x-(k*i)*\lfloor \frac{x}{k*i} \rfloor)}\\=x*(r-l+1)-\displaystyle \sum^{r}_{i=l}{(k*i)*\lfloor \frac{x/k}{i}\rfloor}原创 2020-07-08 12:27:10 · 163 阅读 · 0 评论 -
Plants vs. Zombies【二分】
ZOJ - 4062 Plants vs. ZombiesBaoBao and DreamGrid are playing the game Plants vs. Zombies. In the game, DreamGrid grows plants to defend his garden against BaoBao’s zombies.题意:植物大战僵尸一个长度为 nnn 的数组 array[1,n]array[1,n]array[1,n],初始值为0,每个元素有各自的增长速度a[i]a[i]原创 2020-06-16 22:28:43 · 711 阅读 · 0 评论 -
求和
题目链接题意:求子树结点权值和思路:得到树的dfsdfsdfs 序,将子树操作转化为区间操作。树状数组单点更新,区间查询。#include <bits/stdc++.h>#define lowbit(x) x & (-x)using namespace std;typedef long long ll;const int maxN = 1000006;int ...原创 2020-04-25 08:39:11 · 166 阅读 · 0 评论 -
【带权并查集 He 种类并查集 详详详详详详详hhh】经典例题
POJ 1182 食物链 之 两种解法 de 详解:带权并查集、种类并查集。真详解,窝窝窝,窝不骗人!要记得当初横冲直撞的那个一步步追寻的我~ 博文完结撒花撒花撒花~~~~原创 2020-04-04 19:02:54 · 313 阅读 · 0 评论 -
拉普兰德的愿望【切比雪夫距离+树状数组】
题目链接题意:给出n个点的坐标,求曼哈顿距离不小于d的点对数。我们将坐标①(x,y)(x,y)(x,y)变换为②(x+y,x−y)(x + y, x - y)(x+y,x−y),那么①的曼哈顿距离等于②的切比雪夫距离。切比雪夫距离dis=max(x2−x1,y2−y1)dis=max(x_2-x_1, y_2-y_1)dis=max(x2−x1,y2−y1)那么对于点 iii 来...原创 2020-03-30 23:01:16 · 199 阅读 · 0 评论 -
[CodeForces - 739B] Alyona and a tree 【树 + 差分 + 二分】
题意:给定一颗树,每个结点有对应点权,每条边也有对应边权。如果dis<v, u> <= val[u],则说明结点u被结点v所管辖。对于每个结点,输出它管辖的结点数目。思路:我们定义dis[ u ]为结点u到根结点的边权和。显而易见dis<v, u> = dis[u] - dis[v],并且dis是递增的无根树转有根树,那么对于任何一条树链,树链上结点u...原创 2020-03-01 17:29:26 · 228 阅读 · 0 评论 -
P3128 [USACO15DEC]Max Flow P【树上差分_点差分(LCA)】
P3128 [USACO15DEC]Max Flow P题意一颗树,树上每个结点初始化点权为0. 有k次操作,每次操作对路径<u, v>上每个结点都进行加1操作。问:k次操作全部完成后,点权值最大的结点的点权为多少?思路树上差分之点差分模板无根树转有根树 对路径<u, v>操作时,++sum[u], ++sum[v], -- sum[lca(u, v)]...原创 2020-03-01 16:17:37 · 309 阅读 · 0 评论 -
Nearest Common Ancestors 【POJ - 1330】【LCA模板】
在线离线都有~原创 2020-02-19 21:25:36 · 127 阅读 · 0 评论 -
How far away ?【HDU - 2586】【LCA - Tarjan离线】
HDU - 2586题意:给一颗无根树,求两个结点间的最短路径长度。思路:因为是在树上求最短路,那么肯定是通过LCA的那条路径为最短。那么我们应该怎么求路径长度呢?我们以任意结点为根,将无根树转化为有根树,然后dis[ i ]表示结点 i 到根结点的最短距离,所以dis<u, v> = dis[ u ] + dis[ v ] - dis[ LCA(u, v) ] *...原创 2020-02-19 19:36:46 · 115 阅读 · 0 评论 -
P3379 【模板】最近公共祖先(LCA)【离线算法Tarjan】
感觉离线求LCA就只是用了一个并查集而已,不知道为什么叫Tarjan了(明明Tarjan是用来求有向图Strong Connectivity的说)来说说怎么用离线算法Tarjan来求LCA啦~首先我们将读入的查询和查询的序号存起来,因为是离线算法的嘛~而且要存双向的!(为什么看了下边就懂了的)我们从根开始dfs遍历整棵树,如果搜到叶子结点u了,那么就看下u是不是需要被查询的结点,如果是...原创 2020-02-16 11:28:49 · 150 阅读 · 0 评论 -
P3379 【模板】最近公共祖先(LCA)【在线算法详解】
一、倍增LCA对于结点u和v,不妨设deep[u]>deep[v](1)、先向上跳u使得它们处于同一深度:deep[v];(2)、然后再结点u和结点b一起跳,跳它们最近公共祖先。这里所谓“跳”是指往上跳2的次幂的高度。设f[ u ][ i ]表示距结点u高度差为 2^i 的祖先。 f[ u ][ i ] = f[ f[ u ][ i - 1 ] ][i - 1],其中f[ ...原创 2020-02-14 21:41:34 · 286 阅读 · 0 评论 -
【01Trie树_数组中找到两个数异或值最大】POJ 3764 The xor-longest Path
Trie?Tire?傻傻分不清楚。原谅我一直写的是tire……才刚知道是trie………………原创 2020-02-04 19:30:06 · 234 阅读 · 0 评论 -
【01字典树插入_查找_删除】CodeForces - 923 C. Perfect Security
CodeForces - 923 C. Perfect Security题意:More precisely, for givenAandP, find the lexicographically smallest messageO, for which there exists a permutationπsuch that O(i) ^π(P(i)) == A(i)fo...原创 2020-02-04 17:56:24 · 143 阅读 · 0 评论 -
【Trie树】HDU 1671 Phone List(_判断前缀)【有关Trie树的时间复杂度】
之前好像没有考虑过Trie树的时间复杂度...嗐!原创 2020-02-03 11:30:11 · 418 阅读 · 0 评论 -
【扫描线_求周长】HDU 1828 Picture(两种方法【详】)
HDU 1828 Picture题意:n个矩形块(有叠加部分),求所有矩形块形成的大的二维图形的周长。 思路:首先说求横向边长度 = 当前扫描线覆盖的横向长度 - 上一次扫描线覆盖的横向长度。再就是垂直长度。新开三个数组lc[ rt ]: rt 区间的左端点有没有被扫面线覆盖 rc[ rt ]: rt 区间的右端点有没有被扫描线覆盖 num[ rt ]: rt 区间有几条线段n...原创 2020-01-18 21:12:41 · 369 阅读 · 1 评论 -
【可持久化线段树】HDU 4348 To the moon
可持久化线段树。这道题真的……TAT。四处问,别个还说都给我改吐了……TAT(大哭)。看别人博客真的是一头雾水就想为什么不写详细一点。真的自己写的时候发现真的没什么详细可写的。也就是那句add作为参数传下去,避免空间爆炸。QAQ原创 2020-01-18 13:35:22 · 183 阅读 · 0 评论 -
【线段树_区间合并_异或翻转】HDU 3911 Black And White
【线段树_区间合并_异或翻转】qwq.原创 2020-01-17 10:36:49 · 257 阅读 · 0 评论 -
【DFS序_线段树_思维】CF343D. Water Tree
Codeforces Round #200 (Div. 1)D. Water Tree题意:对一棵树有三种操作:将以x为根的子树全部置1 将x置0,并将其祖先结点都置0 查询以x为根的子树上是不是所有结点都为1思路:首先得到树的dfs序,对dfs序建线段树 置0操作:将以x为根的这个子树对应的的所有线段树区间都置0。单点更新:将in[x]叶子结点置0,那么pushup上去...原创 2020-01-16 20:29:32 · 218 阅读 · 2 评论 -
【莫队_basic】洛谷 SP3267 DQUERY - D-query
dl莫队详解【真的超级详解,很腻害的样子】原创 2020-01-16 16:23:31 · 158 阅读 · 0 评论 -
【分块入门】LOJ 数列分块入门 1 - 9 (学习更新……)
dl题解_「分块」数列分块入门1 – 9 by hzwerLOJ #6277. 数列分块入门 1题意:给出一个长为n的数列,以及n个操作,操作涉及区间加法,单点查值。 时间限制:100ms分块我们将整个数列划分为很多块,暂且分为n / m块,用block[ i ]记录第 i 个数据arr[ i ]对应的块的个数。O(n)【数据读入时就可以操作完成,block[ i ] = (i ...原创 2020-01-16 14:49:57 · 2155 阅读 · 1 评论 -
【主席树】HDU 4417 Super Mario(查询区间中小于val的值的个数【前缀和相减】)
TAT,tcl. i except cai, what i have? TAT……原创 2020-01-15 11:58:43 · 1567 阅读 · 0 评论 -
【可持久化线段树】洛谷 P3919
这个真真切切是在敲了三个主席树的模板之后自己敲出来的可持久化线段树的模板。看了题之后,其实就清楚它和主席树唯一的区别是:主席树(可持久化权值线段树)是权值线段树,而可持久化线段树就是普通的线段树。原创 2020-01-15 09:26:44 · 236 阅读 · 0 评论 -
【主席树_模板】HDU 2665 Kth number(OS:什么鬼的题面,WA了几发才意识到会不会题面出锅了……)
求区间第k小的数【题面给的是the kth big number】(必须标红!!!!!各种debug,最后还是题面背锅……为啥写这种题面……吐槽……)原创 2020-01-14 19:55:21 · 166 阅读 · 0 评论 -
【主席树_模板题】POJ 2104 K-th Number
主席树_模板题【查询区间第k小】原创 2020-01-14 17:00:51 · 219 阅读 · 0 评论 -
【主席树】洛谷 P3834 【模板】可持久化线段树 1(主席树)
洛谷 P3834 【模板】可持久化线段树 1(主席树)这是个非常经典的主席树入门题——静态区间第k小题意:给定n个整数构成的序列,将对于指定的闭区间查询其区间内的第k小值。主席树预备知识:线段树、权值线段树、前缀和思想、离散化(写在前:主席树真的理解了很久,我的感觉就是:如果真的怎么都想不明白那就看着神犇的代码自己敲一遍(当然要选择近似自己码风的代码,我找了n久就没...原创 2020-01-14 15:46:36 · 205 阅读 · 0 评论 -
【扫描线_进阶】HDU 1255 覆盖的面积
【扫面线进阶版!!!!嗐】原创 2020-01-14 09:17:15 · 177 阅读 · 1 评论 -
【线段树_离散化_染色问题】POJ 2528 Mayor's posters
POJ 2528 Mayor's posters题意: 在一个长度为1e7的墙上贴海报。n(<=1e4)张海报贴上去,海报可能会出现覆盖,问:贴完所有的海报之后能看见多少张(能看见一部分也算)海报。给出的海报信息是从第一张到最后一张(也就是贴的顺序)。 思路: 线段树染色问题。 区间数据范围过大,离散化。【注意因为是区间,所以离散化的时候要注意两个数据是不是...原创 2020-01-13 20:00:06 · 250 阅读 · 0 评论 -
【线段树_染色问题】POJ 2777 Count Color
POJ 2777 Count Color题意:对区间[1, L]有两种操作:(1)C A B C染区间[A, B]为颜色C. (2)P A B输出区间[A, B]有多少颜色。初始的时候整个区间都是颜色1. 一共有T种颜色,并且T <= 30.思路: tree[ ] == 0:该区间没有颜色(在这个题中其实不存在) tree[ ] == x(x 是某个整数):该区间只...原创 2020-01-13 19:04:56 · 235 阅读 · 0 评论 -
【扫描线】HDU 1542 Atlantis
HDU 1542 Atlantis题意:给出n个矩形,矩形间可能有重复的区域。问所有矩形覆盖的面积?【题目中说给的信息是矩形左上和右下的坐标信息(因为它的坐标面是y的正方向是向下的),无所谓,反过来就好】思路:扫描线的模板题。FEELING:目前写了两遍。第一遍当然自己写不下来。大致理解了之后开始回忆着敲,有很多bug。然后发现其实还是有不懂的地方。就是对于线段树的建树和pushup...原创 2020-01-13 15:19:23 · 176 阅读 · 0 评论 -
【线段树||set遍历】Codeforces Round #207 (Div. 1) A. Knight Tournament
Codeforces Round #207 (Div. 1) A. Knight Tournament题意: n个骑士(编号1-n),有m场battle,保证每一场battle的人数>=2。给出m场battle的信息:每一场battle的信息是:给出一个区间[l, r],再给出一个该场battle的胜利者编号won,意思就是说[l, r]中还没有被打败的骑士都会在这一场被won打...原创 2020-01-12 15:16:19 · 224 阅读 · 0 评论 -
【线段树_DFS序】POJ 3321 Apple Tree
POJ 3321 Apple Tree题意:给出一个N个结点的无根树。但是要将1看作根,也相当于是一个有根树。最初每个结点都有一个苹果。有两种操作,Q x: 以x为根的子树上有多少个苹果;C x: 改变结点x的状态,也就是原来有苹果就摘了,原来没苹果那就长出来一个。思路:首先我们先将这N个结点跑它的先序遍历(我用的是链式前向星存边,所以实际上是根-右儿子-左儿子的遍历顺序),得到它的DF...原创 2020-01-09 20:43:30 · 152 阅读 · 0 评论 -
【离散化+线段树】POJ 2528 Mayor's posters
POJ 2528 Mayor’s posters题意:在一个长度为1e7的墙上贴海报。n(<=1e4)张海报贴上去,海报可能会出现覆盖,贴完所有的海报之后能看见多少张(能看见一部分也算)海报。给出的海报信息是从第一张到最后一张(也就是贴的顺序)。思路:首先海报的位置可以是1-1e7间的任意位置,所以我们需要离散化一下。关于离散化: 1. 左右位置2n个数去重排序后,如果前后两...原创 2019-12-27 20:02:11 · 164 阅读 · 0 评论 -
二叉树的建立和三种遍历
#include <iostream>#include <cstdio>#include <cmath>#include <string>#include <cstring>#include <algorithm>#include <limits>#include <vector>#in...原创 2019-11-23 16:02:38 · 142 阅读 · 0 评论 -
哈夫曼树的建立,编码,译码,先中后遍历
#include <iostream>#include <cstdio>#include <cmath>#include <string>#include <cstring>#include <algorithm>#include <limits>#include <vector>#in...原创 2019-11-23 16:01:53 · 590 阅读 · 0 评论 -
【思维+树状数组_差分】Codeforces Round #595 (Div. 3)D. Too Many Segments
题意:给n个线段,我们需要保证每个点(只考虑整数点)的重复不超过k次,让我们找出要剔除的线段,并输出这些线段的位置。D1. Too Many Segments (easy version)思路:没有思路,要说思路就是暴力!(哈哈)真的是纯暴力就是将一个线段分别以每个整数点为起点,右端点为终点,分为len个线段,都存起来。并且按照新的左端点升序,左端点相同线段长度降序排序。然后遍历...原创 2019-10-31 17:55:26 · 113 阅读 · 0 评论