ACM-数据结构
文章平均质量分 69
并查集、线段树/树状数组/分块/ST表,二叉树
nefu-ljw
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
第十二届蓝桥杯省赛第二场C++A/B组 AcWing 3492. 负载均衡【树状数组/堆】
题目链接3492. 负载均衡思路一我的思路是先按机器分类,然后对每个机器进行处理。对于每个机器,有一个开始时间a和持续时间c,消耗算力d。可以维护一个时间区间,其权值为这段时间内所消耗的算力。将m个查询转化为离线查询。如果这个机器能分配到资源,就进行区间修改,即对[a,a+c]区间的算力+d,具体可以用树状数组维护(差分,区间修改+单点查询)。#include <bits/stdc++.h>using namespace std;const int N=2e5+10;int t原创 2021-06-04 18:34:27 · 487 阅读 · 0 评论 -
2021年度训练联盟热身训练赛第八场 B题 Gene Tree【树中所有叶结点之间的距离平方和】
2021年度训练联盟热身训练赛第八场 B Gene Tree题意很简单:求树中所有叶结点之间的距离平方和(树根也看作叶结点)。对于树根root,取两个叶结点x,y,设其距离为dis(x,y),则有:dis(x,y)=dis(root,x)+dis(root,y)−2∗dis(root,lca(x,y))dis(x,y)=dis(root,x)+dis(root,y)-2*dis(root,lca(x,y))dis(x,y)=dis(root,x)+dis(root,y)−2∗dis(root,lc原创 2021-05-12 23:27:49 · 437 阅读 · 0 评论 -
2020-2021 ACM-ICPC Brazil Subregional Programming Contest E题 Party Company【树上倍增+树状数组维护】
题目链接https://codeforces.ml/gym/102861/problem/E题意给你n个结点的树,每个点有一个权值,保证所有父节点的权值大于等于其子结点的权值,再给你m个范围为[l,r]的party和它们所在的点(the owner of this party)。对于某个点u,若其直接相连的父结点或子结点有party 且 u点权值在其父结点或子结点的party的[l,r]范围内,那么点u就加入该party。问:每个点加入的party个数。思路将左端点和右端点的限制分开来考虑。首先原创 2021-05-12 15:18:28 · 28440 阅读 · 1 评论 -
2019-2020 ICPC, Asia Jakarta Regional Contest K题 Addition Robot【线段树维护矩阵积】
题目链接https://codeforces.com/problemset/problem/1252/K思路初始a,b值写成矩阵,操作a=a+b和b=a+b也写成矩阵,则如下:a=a+b即[ab00]∗[1011]=[a+bb00]a=a+b即\left[ \begin{matrix} a & b\\ 0 & 0 \end{matrix} \right]*\left[ \begin{matrix} 1 & 0\\ 1 & 1原创 2021-05-09 16:35:51 · 422 阅读 · 0 评论 -
【ACM模板】线段树
P3372 【模板】线段树 1区间修改(加法),区间查询(和)。#include <bits/stdc++.h>#define lson i<<1#define rson i<<1|1using namespace std;typedef long long ll;const int N=1e5+10;ll a[N];struct node{ int l,r; ll lazy; // 懒标记(存每个结点需要加上的和,如果为0则为无标记)原创 2021-05-01 12:55:39 · 317 阅读 · 0 评论 -
PAT甲级 2021年春季考试 7-3 Structure of Max-Heap 【最大堆;字符串处理】
在线测试传送门:PAT(甲级)2021年春仿真卷7-3 Structure of Max-Heap (25 分)In computer science, a max-heap is a specialized tree-based data structure that satisfies the heap property: if P is a parent node of C, then the key (the value) of P is greater than or equal to the原创 2021-03-17 11:50:04 · 594 阅读 · 1 评论 -
2020年第十五届黑龙江省大学生程序设计竞赛 B. Bills of Paradise【线段树/树状数组+并查集】
传送门:B. Bills of Paradise题意给你一个函数,由它产生nnn个数a1...ana_1...a_na1...an,现在有qqq次操作,操作有以下四种:D x。标记大于等于xxx的第一个未标记的aia_iai;若没有,则不操作。F x。查询大于等于xxx的第一个未标记的aia_iai;若没有,则输出101210^{12}1012。R x。清除小于等于xxx的所有标记;若没有,则不操作。C x。查询小于等于xxx的所有未标记数之和;若没有,则输出000。思路n=1e原创 2020-10-09 10:48:06 · 1424 阅读 · 3 评论 -
并查集/最小生成树-kruskal算法(2019.4.6训练)
A题 hdu 1232 畅通工程并查集模板题,掌握find(x)函数和join(a,b)函数的用法即可。find(x)函数表示找x的祖先节点,使用了路径压缩算法,在找x的祖父节点的同时,还使从x结点搜索祖先结点的过程中所经过的所有结点都指向该祖先节点。join(a,b)函数表示把a的祖先节点以及a下面的所有子节点全都指向b的祖先节点,这是由于find函数运用了路径压缩算法,使从a开始搜索时经...原创 2019-04-07 22:59:11 · 842 阅读 · 0 评论 -
2020牛客暑期多校训练营(第六场) K题 K-Bag【滑动窗口】
题目链接:https://ac.nowcoder.com/acm/contest/5671/K题意定义k-bag为1~k的若干个全排列组成的序列,part-k-bag为k-bag的连续子序列。给你一个长度为n的序列,判断其是否为part-k-bag。思路part-k-bag的特点是中间是若干个完整的1~k全排列,左边和右边可能存在长度小于k的全排列。先求得len[i],表示以i为终点,i 和 i之前 有多少个不相同的数字。用类似于求滑动窗口的方法求len[i]。然后,枚举最后一个完整k-bag的原创 2020-08-03 10:09:49 · 395 阅读 · 0 评论 -
Codeforces Round #660 (Div. 2) C. Uncle Bogdan and Country Happiness【树/DFS】
题目链接:https://codeforc.es/contest/1388/problem/CProblem tagsdfs and similar, dp, greedy, math, trees, *1800题意原题面是真的长,我还以为是英文阅读理解给你一个根节点为1的树,总共有m个人,白天他们都在根节点工作,晚上所有人都要走最短路回到各自的家。已知家在 i 点的人数为a[i]。每个人最开始在根节点有好心情或坏心情,但是在回家的路上(经过边)好心情可能变成坏心情,一旦是坏心情,就再也不会变原创 2020-07-31 13:50:28 · 1159 阅读 · 0 评论 -
2020牛客暑期多校训练营(第二场) C题 Cover the Tree【树的dfs序+思维】
题目链接:https://ac.nowcoder.com/acm/contest/5667/C题意给你一棵无根树,每次可以在树中选择2个节点连成一条链,要求选择最少的链覆盖所有的边(注意是覆盖所有的边而不是点)。输出最少需要几条链以及每条链的两个端点。思路首先基本都能够想到,链的端点尽量取叶子节点是最优的。因为叶子是每个子树中最深的节点,每次将叶子之间互相连接,覆盖的边显然会更多。因此,只要搜索出所有叶子,再按一定的策略(这个策略十分重要,见下文)两两相连,就能得到最优解。如果只是要求叶子,而原创 2020-07-14 14:06:16 · 1193 阅读 · 0 评论 -
HDU 1506 Largest Rectangle in a Histogram【单调栈/单调队列】
HDU 1506 Largest Rectangle in a Histogram题意:给出一个长度为n的序列,这些序列代表每个宽度为1的矩形的高,矩形是按顺序连在一起的,问最大相连面积(高为相连矩形的最小)。思路:对于每个最大连续的矩阵区间,如果它的边界有比这个区间最矮的矩形高的矩形,那么高的矩形肯定会被合并进去的。即找到每个节点的从左(从右)第一个比它小的节点, 这样就是当前节点能构成...原创 2020-04-28 00:29:41 · 292 阅读 · 0 评论 -
蓝桥杯练习 算法提高 ADV-183 分苹果【线段树】
题目链接:http://lx.lanqiao.cn/problem.page?gpid=T345线段树模板题,稍微改一下query函数就行了。#include <bits/stdc++.h>using namespace std;const int N=1e5+10;int n,m,x,y,k,a[N],tr[4*N],add[4*N];void pushup(int i)...原创 2019-12-09 17:09:14 · 1242 阅读 · 0 评论 -
数列分块入门(2019.8.15训练)
LOJ 6279 数列分块入门3#include <bits/stdc++.h>using namespace std;const int N=1e5+10;vector<int>g[510];int n,l,r,k,bl,opt,a[N],b[N],f[N];void resort(int num){ g[num].clear(); for(...原创 2019-08-16 12:50:08 · 378 阅读 · 0 评论 -
最近公共祖先(LCA)&&RMQ问题(ST表)(2019.7.29训练)
P3379 【模板】最近公共祖先(LCA)LCA模板,注释写得很详细了 (大佬请自动忽略我写的冗长的注释)#include <bits/stdc++.h>using namespace std;const int N=5e5+10;int n,m,x,y,s,v,cnt,f[N][21],dep[N],head[N];//f[i][j]表示i的2^j祖先,也就是i向上跳2^j...原创 2019-08-16 12:48:55 · 371 阅读 · 0 评论 -
快速求树中某个节点的k级祖先【树上倍增/LCA魔改】
题目描述Time Limit: 12000 MS Memory Limit: 131072 KDescription你将得到一个有根树,其中根节点的位置是已知的。其后将有多个询问,每个询问包括两个属性x和k,要求你找到x的第k级祖先,如果不存在,则输出“0”。假设有一棵树形如下图:其中,树的根节点为绿色点。若x为红点,则其二级祖先是蓝色点,三级祖先是绿色点。Input本题为多组...原创 2019-12-20 21:31:01 · 2810 阅读 · 0 评论 -
SDUT 3915 从零开始的异世界生活【线段树,区间求和】
http://acm.sdut.edu.cn/onlinejudge2/index.php/Home/Index/problemdetail/pid/3915.html线段树水过…(蕾姆好可爱啊 我做这道题就是为了蕾姆 )#include <bits/stdc++.h>using namespace std;typedef long long ll;const int N...原创 2019-07-03 23:06:05 · 365 阅读 · 3 评论 -
区间修改+区间查询【树状数组实现,超越线段树】
参考文章:https://blog.youkuaiyun.com/MM__1997/article/details/76691744以之前做过的一个线段树模板题为例:洛谷 P3372 线段树1如何用树状数组实现 区间修改+区间查询 呢?推导数学公式:sum[n]= a[1] + a[2] +…+ a[n]= (d[1]) + (d[1]+d[2]) +…+ (d[1]+d[2]+…+d[n])= ...原创 2019-08-27 16:52:03 · 1257 阅读 · 1 评论 -
树状数组(2019.7.22训练)
洛谷 P3374 【模板】树状数组 1单点修改,区间查询和。#include <bits/stdc++.h>using namespace std;const int N=5e5+10;int n,m,x,y,opt,a[N];void update(int i,int v){ while(i<=n) { a[i]=a[i]+v; ...原创 2019-07-31 17:54:03 · 362 阅读 · 0 评论 -
线段树(2019.6.25训练)
hdu 1754 I Hate It单点修改,区间维护最大值。具体思路详见代码注释。#include <bits/stdc++.h>using namespace std;const int N=2e5+10;int n,m,A,B,a[N],tr[4*N];//tr[i]表示第i个区间内的最大值void build(int i,int l,int r)//i是区间[l,r...原创 2019-07-02 20:44:16 · 422 阅读 · 0 评论
分享