数据结构
Absoler
这个作者很懒,什么都没留下…
展开
-
牛客多校 E Explorer(时间分治+可持久性并查集)
题目cdq分治,也叫时间分治,核心概念就是对于若干个操作和查询,维护每次操作在哪个时间段中有效。这道题中的size就是时间,我们维护某个size区间上点的连通状况(用并查集维护),进行查询时进入某个点则连上这个点上的边,退出它时把并查集再复原。#include<bits/stdc++.h>using namespace std;#define lson rt<&...原创 2020-04-14 23:29:43 · 260 阅读 · 0 评论 -
HDU6230-Palindrome
题目连接题目大意:定义一种 one−and−halfone-and-halfone−and−half 回文串,其长度为 3n−23n-23n−2 ,满足 s[i]=s[2n−i]=s[2n−2+i],1≤i≤ns[i]=s[2n-i]=s[2n-2+i], 1 \leq i\leq ns[i]=s[2n−i]=s[2n−2+i],1≤i≤n 。输入一个长度为n (n≤5e5)(n\leq 5e5...原创 2019-11-19 21:25:36 · 122 阅读 · 0 评论 -
HDU6592&杭电多校第二场B
单调栈解法#include<iostream>#include<cstdio>#include<cstring>#include<stack>using namespace std;const int maxn=3e5+4;int pos1[maxn],pos2[maxn],d[maxn]; //pos1[i]表示以i位置结尾的...原创 2019-10-25 00:37:03 · 131 阅读 · 0 评论 -
单调栈的运用
题目来源:poj3250 题目链接题目大意:有一群列队,面朝右站立的牛,输入每头牛的身高,如果视线前方有一头高于自己的牛,则看不到它之后的牛;求出所有牛能看到头顶的个数。n方算法超时,故考虑优化,首先能想到的是,在计算左边的牛能看到多少牛时,可以利用右边的结果。栈优化的思路即是,从右向左遍历牛的身高,同时对栈进行操作(栈中存放牛的编号),栈首牛低于当前牛,则去掉该元素;反之则说明该牛最远能...原创 2018-08-05 00:23:26 · 175 阅读 · 0 评论 -
并查集在实际问题中的应用
并查集:用以将元素高效分组以及区分。题目来源:codeforces 1012B原问题如下,在一个(n*m)的table上,element会做出一种增值行为,如果有三个物质处于某个矩形的三个顶点上,那么在第四个顶点上会自动增值出一个element。现在table上已经存在了一些物质,求出最少仍需多少额外的物质,使得其可以将table覆盖。对于解这道题来说,灵活的转化思想非常重要。首先我们...原创 2018-08-04 00:23:31 · 831 阅读 · 0 评论 -
单调队列
单调队列是一种在直觉上很容易想到的数据结构。有一个经典例子是滑动窗口问题,对于一串数字(长为n),存在一个在其上滑动的矩形窗(长为k),要求线性时间内求出每个窗口中的最大值。我们可以想见在窗口的每次右移后,新的最大值与原最大值会具有很密切的关系。我们可以设置一个单调减队列q,添加元素时从队尾添加,遇到比这个元素小的,全部剔除,因为这些元素既没有新元素大,位置又靠前,它们已经失去了“出场机会”。如果...原创 2019-07-26 18:09:32 · 110 阅读 · 0 评论