算法基础
里面是一些基础算法相关题解
S atur
要变成萤火虫~
展开
-
P3379 【模板】最近公共祖先(LCA)
传送门思路:所谓LCA即两点的最近公共祖先,暴力的思维当然是一步一步往上爬寻找相交的第一个祖先,但这么暴力显然会超时。这个时候就可考虑以2的倍数来加速向上爬,且是从……32,16,8,4,2,1这样从大往小的选择跳跃步数(这样方便对大数悔棋)。大概操作即先爬最深的点x,让x与y位于同一深度时再开始一起往上爬。首先要记录各个点的深度和他们 2^i 级的的祖先,用数组d表示每个节点的深度,用 fa[i][j] 表示节点 i 的 2^j 级祖先。具体思路操作参考大佬博客,真的超详细,超nice!原创 2020-08-21 01:26:52 · 165 阅读 · 0 评论 -
Codeforces E. 1-Trees and Queries (树 & LCA & 定长路径)
传送门题意: 给定一个含有n个节点的树(相邻两点间的距离为1),以及q个询问。每一个询问给出5个整数:x,y,a,b,k。指如果像树中的x节点和y节点之间加一条边,问是否存在一条路径从a到b长度为k的路径?(注:每一次询问添加的边不会互相干扰,即只在该次询问有效)思路:首先我们看a与b之间的连通性,有三种有意义的最短路径L:a -> b,即不需要x与y之间的边a和b也能连通,距离记录为dist_ab。a -> x -> y -> b,记作dist_axyb。a原创 2020-08-21 00:37:09 · 208 阅读 · 0 评论 -
A. 数字 (思维) (智算之道复赛高校组)
传送门思路: 就是简单的模拟一下,不用特殊处理中间的0(我又菜到被卡了,呜呜呜~)。代码实现:#include<bits/stdc++.h>#define endl '\n'#define null NULL#define ll long long#define int long long#define pii pair<int, int>#define lowbit(x) (x &(-x))#define ls(x) x<<1#defi原创 2020-08-09 22:11:24 · 135 阅读 · 0 评论 -
区间合并
题目链接:https://www.acwing.com/problem/content题意:给定 n 个区间 [li,ri],要求合并所有有交集的区间。注意如果在端点处相交,也算有交集。输出合并完成后的区间个数。例如:[1,3]和[2,6]可以合并为一个区间[1,6]。数据范围1≤n≤100000,−109≤li≤ri≤109输入样例:51 22 45 67 87 9...原创 2020-01-21 22:41:08 · 420 阅读 · 0 评论 -
离散化:区间和
题目链接:https://www.acwing.com/problem/content/804/题意:假定有一个无限长的数轴,数轴上每个坐标上的数都是0。现在,我们首先进行 n 次操作,每次操作将某一位置x上的数加c。近下来,进行 m 次询问,每个询问包含两个整数l和r,你需要求出在区间[l, r]之间的所有数的和。数据范围−109≤x≤109,1≤n,m≤105,−109≤l≤r≤...原创 2020-01-21 20:59:49 · 507 阅读 · 0 评论 -
双指针算法:数组元素的目标和
题目链接:https://www.acwing.com/problem/content/802/题意:给定两个升序排序的有序数组A和B,以及一个目标值x。数组下标从0开始。请你求出满足A[i] + B[j] = x的数对(i, j)。数据保证有唯一解。数据范围数组长度不超过100000。同一数组内元素各不相同。1≤数组元素≤109输入样例:4 5 61 2 4 73 4 6 ...原创 2020-01-21 18:08:45 · 224 阅读 · 0 评论 -
双指针算法:最长连续不重复子序列
题目链接:https://www.acwing.com/problem/content/801/题意:给定一个长度为n的整数序列,请找出最长的不包含重复数字的连续区间,输出它的长度。数据范围1≤n≤100000输入样例:51 2 2 3 5输出样例:3思路:其实这种类型的题也可以暴力枚举做,不过时间复杂度就是O(n^2)了;利用双指针不断移动更新指针的位置,就可以把暴力的算法优化...原创 2020-01-21 14:19:28 · 286 阅读 · 0 评论 -
差分矩阵:二维差分
题目链接:https://www.acwing.com/problem/content/800/输入一个n行m列的整数矩阵,再输入q个操作,每个操作包含五个整数x1, y1, x2, y2, c,其中(x1, y1)和(x2, y2)表示一个子矩阵的左上角坐标和右下角坐标。每个操作都要将选中的子矩阵中的每个元素的值加上c。请你将进行完所有操作后的矩阵输出。数据范围1≤n,m≤1000,...原创 2020-01-16 22:43:40 · 590 阅读 · 0 评论 -
差分
题目链接:https://www.acwing.com/problem/content/799/输入一个长度为n的整数序列。接下来输入m个操作,每个操作包含三个整数l, r, c,表示将序列中[l, r]之间的每个数加上c。请你输出进行完所有操作后的序列。数据范围1≤n,m≤100000,1≤l≤r≤n,−1000≤c≤1000,−1000≤整数序列中元素的值≤1000输入样例:...原创 2020-01-16 21:23:25 · 342 阅读 · 2 评论 -
子矩阵的和:二维前缀和
题目链接:https://www.acwing.com/problem/content/798/数据范围1≤n,m≤1000,1≤q≤200000,1≤x1≤x2≤n,1≤y1≤y2≤m,−1000≤矩阵内元素的值≤1000输入样例:3 4 31 7 2 43 6 2 82 1 2 31 1 2 22 1 3 41 3 3 4输出样例:172721思路:和以为...原创 2020-01-15 23:40:56 · 192 阅读 · 0 评论 -
前缀和
题目链接:https://www.acwing.com/problem/content/797/数据范围1≤l≤r≤n,1≤n,m≤100000,−1000≤数列中元素的值≤1000输入样例:5 32 1 3 6 41 21 32 4输出样例:3610思路:对于一个数组a,如果对于m个测试数据都采用循环求[l , r ]的区间和的话就极易超时。而这个时候我们可以另开一...原创 2020-01-15 22:53:45 · 288 阅读 · 0 评论