数据结构
HangShao99
将来的你一定会感谢现在拼命的自己~~~~
展开
-
2018-2019 ACM-ICPC, Asia Jiaozuo Regional Contest H题(后缀数组+单调栈+线段树)
题目链接:https://nanti.jisuanke.com/t/A2206题意:给你n个数,1<=l<=r<=n,求所有本质不同的a[l...r]的最大值的和分析:本质不同的子串可想到用后缀数组,所有子串等价于该串的所有后缀的所有前缀,利用后缀数组求本质不同的子串的原理,即本质不同的子串=总子串个数-本质相同的子串个数=n-sa[i]+1为该后缀的前缀个数,即...原创 2019-10-20 21:39:38 · 301 阅读 · 0 评论 -
Comet oj Contest #3 D(线段树维护线性基+差分树状数组)
题目:https://www.cometoj.com/contest/38/problem/D?problem_id=1543分析:如果是单点修改,这题就是⼀个线段树维护区间线性基的题,但这⾥是区间xor,我们考虑维护原序列的xor差分,这样每次修改的时候只需要修改两个位置的值就可以了,不⽤修改⼀个区间。 查询的时候,只需要特判边界,因为简单的线性代数知识告诉我们维护xor差分的线性基和原序...原创 2019-07-13 15:35:00 · 139 阅读 · 0 评论 -
扫描线
首先推荐一篇大佬的博客:https://blog.csdn.net/xianpingping/article/details/83032798题目:http://poj.org/problem?id=1151扫描线裸题,主要是为了贴个板子Ac code:#include<stack>#include<cstdio>#include<iostrea...原创 2019-07-15 11:01:43 · 86 阅读 · 0 评论 -
分块(真的是优雅的暴力)
M - 一道普通题1给出一个长为n的数列,以及n个操作,操作涉及区间加法,询问区间内小于某个值x的前驱(比其小的最大元素)。Input第一行输入一个数字n,1≤n≤100000。第二行输入n个非负整数,第ii个数字为ai(0≤ai≤10^9)以空格隔开。接下来输入n行询问,每行输入四个数字opt、l、r、c(c>0),以空格隔开。若 op...原创 2018-07-24 15:40:00 · 1435 阅读 · 0 评论 -
二维树状数组
1、单点修改,区间查询例题:https://loj.ac/problem/133分析:类比一维的单点修改,区间查询Ac code:#include<bits/stdc++.h>using namespace std;const int maxn=5100;typedef long long ll;ll c[maxn][maxn];int n,m;int l...原创 2019-07-15 15:11:18 · 180 阅读 · 0 评论 -
LCA的应用
1、多次询问求树上两个点的距离例题:hdu2586http://acm.hdu.edu.cn/showproblem.php?pid=2586分析:LCA的板子题,关键利用dist[u,v]=dist[1,u]+dist[1,v]-2*dist[1,lca(u,v)];Ac code:#include<bits/stdc++.h>using namespace s...原创 2019-07-15 21:30:50 · 540 阅读 · 0 评论 -
树链剖分
第一次学树剖,推荐一篇大佬博客:https://www.cnblogs.com/KatouKatou/p/9557540.html树剖关键代码:void dfs1(int u,int f){ sze[u]=1; for (int i=head[u];~i;i=edge[i].nxt){ int v=edge[i].v; if(v==f)co...原创 2019-07-16 17:40:07 · 116 阅读 · 0 评论 -
Codeforces Round #199 (Div. 2) E
题目链接:https://codeforces.com/problemset/problem/342/E题意:给你一个树,起初根结点(1号结点)为红色,其余结点为蓝色,每次有两种操作。1、把蓝色结点涂成红色2、求给定结点v与树上最近的结点之间的距离,每条边权值都为1分析:题解很巧妙,把m次操作中1操作分成块,每次对于1操作次数如果到了sqrt(m),就用bfs更新已有的红色点i到其...原创 2019-07-17 10:52:03 · 114 阅读 · 0 评论 -
hdu3804(树链剖分+线段树)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=3804题意:给你一个树,每条边都有一个权值,现在有m组询问,每次询问输入一个二元组(x,y),其结果要满足以下两个条件的最大值1、必须是从x->1路径上的一条边2该边的权值必须<=y,且是最大的边分析:把询问离线处理,先把原本树的边按权值从小到大排序,询问按y值从小到大排,对于边...原创 2019-07-17 15:29:11 · 186 阅读 · 0 评论 -
ACM-ICPC 2018 焦作赛区网络预赛 E(树链剖分+线段树)
题目链接:https://nanti.jisuanke.com/t/A2015题意:给你一棵树,根结点为1,初始每个结点值都为0,支持以下操作1、u v x 将u->v路径上的每个结点的值都乘上x2、u v x 将u->v路径上的每个结点值都加上x3、u v 将u->v路径上的每个结点值都按位取反4、u v 求u->v路径上的每个节点的值的和分析:如...原创 2019-08-06 18:53:49 · 181 阅读 · 0 评论 -
Codeforces Round #136 (Div. 1)E(尺取法+树状数组)
题目链接:https://codeforces.com/contest/220/problem/E题意:只保留a数列中1..l和r..n的数构成b数列,然后b数列的逆序对数小于等于k.问这样的l,r的对数。分析:树状数组+尺取枚举l,每次找到最小的满足题意的r,对答案的贡献是n-r+1,然后用两个树状数组,分别维护增加或者减少一个数的时候,前半段和后半段对逆序数的影响。Ac cod...原创 2019-08-16 20:31:22 · 181 阅读 · 0 评论 -
wustoj2613电话号码(字典树)
题目链接:http://10.162.32.3/problem.php?id=2613&soj=0分析:要求独一无二的字符串,可把每个号码的所有后缀都插入字典树,这样就会得到每个号码的所有子串,然后枚举每个号码的每个后缀,假设删除该后缀后,不存在该后缀了那么该后缀肯定是独一无二的,最后恢复一下就好了。Ac code:#include<bits/stdc++.h>...原创 2019-08-17 09:22:20 · 232 阅读 · 0 评论 -
线性基
感谢大佬博客:https://blog.csdn.net/qaq__qaq/article/details/53812883定义设数集TT的值域范围为[1,2n−1][1,2n−1]。TT的线性基是TT的一个子集A={a1,a2,a3,...,an}A={a1,a2,a3,...,an}。AA中元素互相xor所形成的异或集合,等价于原数集TT的元素互相xor形成的异或集合。可以理...原创 2019-07-12 17:05:26 · 151 阅读 · 0 评论 -
HDU6534(离散化+树状数组+莫队)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=6534题意:给一段序列,27000次询问l到r区间有多少对(i,j)(i<j)使得|ai−aj|<=k分析:首先分析可知,每增加一个数x,答案就会增加num(x−k<=i<=x+k),减少同理减少这么多。所以离散化+莫队+树状数组就完事了,总复杂度O()。Ac code:...原创 2019-06-04 21:58:24 · 277 阅读 · 0 评论 -
codeforces 292E. Copying Data(线段树)
E. Copying Datatime limit per test 2 secondsmemory limit per test 256 megabytesWe often have to copy large volumes of information. Such operatio...原创 2018-11-26 13:04:46 · 245 阅读 · 0 评论 -
0-1字典树
题目:http://acm.hdu.edu.cn/showproblem.php?pid=5536题意:给你n个数,要找三个不同的数a[i],a[j],a[k]使(a[i]+a[j])^a[k]最大,求最大值分析:对于异或的最大值问题,一般考虑用01字典树,先把这n个数插入字典树中,然后直接枚举a[i]+a[j],并从字典树中暂时删除a[i],a[j],在字典树中直接找与(a[i]+a[j...原创 2019-01-13 20:16:27 · 304 阅读 · 0 评论 -
DAG的最短路
题目:https://ac.nowcoder.com/acm/contest/329/B分析:由于带负权,肯定不能用Dijkstra,用spfa可高效解决,但是特殊 DAG 的性质使得 SPFA 算法无法在规定的时间限内求解出答案,此时由DAG的拓扑序列可以很好解决该问题。因此,放弃vis数组,以拓扑序列来入队Ac code:#include<bits/stdc++.h&g...原创 2019-01-27 18:57:42 · 540 阅读 · 0 评论 -
ST表
ST表就是一个用来解决rmq(区间最值)问题的算法。 ST表不支持在线修改。 预处理时间复杂度O(nlogn),查询时间O(1)。 ST表算法详解(求最小值): 用mn[i][j]表示从j到j+2^i-1的最小值(长度显然为2^i)。 任意一段的最小值显然等于min(前半段最小值,后半段最小值)。 那么mn[i][j]如何用其他状态来继承呢? j到j+2^i-1的长度为2^i,那么一...原创 2019-02-23 14:29:28 · 142 阅读 · 0 评论 -
离散化+线段树
题目:http://acm.hdu.edu.cn/showproblem.php?pid=6464分析:每次1操作会往序列底加first个second,first 和 second 都是最大1e9的数据,每次2操作询问序列中第first到第second个数的和一开始就感觉有点像线段树,输入数据太大我们可以离线处理把数据离散化下,然后扔到线段树上,维护两个数组:sum: 区间数的值的...原创 2019-03-18 17:05:27 · 1010 阅读 · 0 评论 -
树状数组求逆序对
题目:http://acm.hdu.edu.cn/showproblem.php?pid=5792分析:计算像a,b这样上升的有la对,像c,d这样下降的有lb对,ans=la*lb。这样是有重复的,重复的就是a与c重合,a与d重合,b与c重合,b与d重合这四种情况。那么减去这四种情况就ok了。可以用树状数组预处理出每一位i的左边比a[i]大的有多少La[],少的有多少Li[],右边比...原创 2019-04-10 23:09:21 · 129 阅读 · 0 评论 -
二分+线段树
题目:C. Storetime limit per test 1.0 smemory limit per test 256 MBIchuan is a store owner and his store has n products, numbered from11tonn.Recently, his business is not very good, and he c...原创 2019-04-07 21:55:46 · 550 阅读 · 0 评论 -
树形dp+二分
题目:https://ac.nowcoder.com/acm/contest/560/I题意:给你结点数为n的树,有n-1条边,每个结点都有一个权值,要你划分成k个连接的部分使每个部分的最小值最大分析:对于这种最小值最大问题一般都是二分,二分答案,然后dfs如果一部分>=答案就把它截取下来,一直截完看它有没有k个部分。Ac code:#include<bits/std...原创 2019-05-12 17:38:59 · 189 阅读 · 0 评论 -
ACM-ICPC 2018 徐州赛区网络预赛H题
Ryuji is not a good student, and he doesn't want to study. But there are n books he should learn, each book has its knowledge a[i]a[i].Unfortunately, the longer he learns, the fewer he gets.That m...原创 2018-09-10 21:26:24 · 301 阅读 · 0 评论