数据结构
Strezia
这里介绍不了我
展开
-
#796 Div.2 F. Sanae and Giant Robot set *
1688Fset,2500给出 a,ba,ba,b 两个序列,并给出 mmm 个区间 [li,ri][l_i,r_i][li,ri],每次可以从它们中满足 ∑i=lrai=∑i=lrbi\sum_{i=l}^ra_i=\sum_{i=l}^rb_i∑i=lrai=∑i=lrbi 的区间中任选一个,对这个区间的所有数执行 ai=bia_i=b_iai=bi,问能否经过若干次操作,使得 aaa 序列和 bbb 序列相同?区间可以被选当且仅当这个区间内两序列和相同,也就是差为0,所以用数组 si原创 2022-06-27 17:10:01 · 180 阅读 · 0 评论 -
#795 Div.2 E. Number of Groups set *
link有两种颜色的线段,颜色不同的线段中,有相交部分的线段之间有连边。求图的连通块个数。线段数量不超过 10510^5105 。把每条线段分为出点和入点,并从小到大排序,依次遍历这 2n2n2n 个点,入点相当于加入这条线段,出点即为删除。通过并查集分别维护 111 和 000 的线段即可。因为 n≤105n\leq 10^5n≤105,所以不能 O(n2)O(n^2)O(n2) 暴力连边,考虑如何优化。因为我们按坐标从小到大排序,我们只需要保留所有线段中右端点最大的线段即可,其他的线段都可以删掉(因为原创 2022-06-23 13:02:47 · 101 阅读 · 0 评论 -
#795 Div.2 D. Max GEQ Sum 单调栈
1691D1800给出一个序列 a1,a2,...,ana_1, a_2,...,a_na1,a2,...,an,问是否对所有的 i,j(1≤i≤j≤n,)i,j(1\leq i\leq j\leq n,)i,j(1≤i≤j≤n,),满足 max(ai,...aj)≥ai+...+aj\max(a_i,...a_j)\geq a_i+...+a_jmax(ai,...aj)≥ai+...+aj。(n≤2e5,−109≤ai≤109)(n\leq 2e5,-10^9\leq a_i\leq原创 2022-06-19 19:08:32 · 273 阅读 · 0 评论 -
#797 Div.3 G. Count the Trains 思维
1690G2000,思维,数据结构nnn 辆车排成一列,每列车的速度不能超过前面的车的速度也不能超过自己的最高限速,现给出它们的最高限速。并给出 mmm 次修改:形如 ,表示将第 iii 辆车的最高限速降低 xxx ,保证任意时刻车的速度为非负。求出每次操作后序列的总段数是多少。(例如 分别算1、2、3段)。题目意思就是维护一个最长严格下降子序列的长度。注意到修改只有降低,没有升高。也就是说假如第 iii 辆车对答案没有贡献,那么之后除非对第 iii 辆车进行修改,否则它永远对答案没有贡献,同时即便修原创 2022-06-18 15:23:07 · 408 阅读 · 0 评论 -
CF1668D. Optimal Partition* dp 2100
link#782 div.22100, 树状数组优化dp,离散化题意给你一个数组,要求你分成若干个连续的子数组,每个子数组的价值为:若子数组数字和为正数,价值为数组长度和为0,价值为0和为负数,价值为数组长度 * -1求子数组价值和最大值。 n≤5e5,−1e9≤ai≤1e9n \leq 5e5, -1e9\leq a_i\leq 1e9n≤5e5,−1e9≤ai≤1e9思路设 vali,jval_{i, j}vali,j 表示数组第 iii 到第 jjj 项的价值, dpidp原创 2022-04-24 00:14:18 · 179 阅读 · 0 评论 -
Acwing298.围栏 单调队列优化dp *
Link思路首先把所有工匠按 SiS_iSi 从小到大排序,保证能按顺序进行线性dp设 f[i][j] 表示安排前 iii 个人粉刷前 jjj 块木板(可以有空着不刷的木板),工匠们能获得的最多报酬。第 i 个工匠什么也不刷,f[i][j] = f[i-1][j]第 j 块木板可以空着不刷,f[i][j] = f[i][j-1]第 i 个工匠粉刷第 k+1 块到第 j 块木板,由于该工匠粉刷总数不能超过 LiL_iLi, 且必须粉刷 SiS_iSi, 所以需要满足: k+1≤Si≤j,原创 2022-03-24 15:58:15 · 168 阅读 · 0 评论 -
CF888G Xor-MST 01字典树&dfs*
linkdfs,mst,01trie,2300题解写的很清楚,也是看了题解才会做。。const int maxn = 2e5 + 10;int n;int a[maxn];int nxt[maxn*30][2], cnt = 1;void insert(int x) { int cur = 1; for(int i = 30; i >= 0; i--) { if(!nxt[cur][(x>>i)&1]) nxt[cur][(x>>i)&1]原创 2022-03-01 17:51:37 · 96 阅读 · 0 评论 -
CF1446C Xor Tree 字典树*
link01字典树,dp, 2100想了很久才想明白。。总之问题等价于保留尽可能多的数,使只存在一对(i,j)(i, j)(i,j) 对彼此而言异或值都是最小的。建立字典树,设 fpf_pfp 表示以 ppp 为根的子树最多保留多少个数。对于以 ppp 为根的子树,1.若它没有子节点(即为叶节点),则f[p]=1;2.若仅有一个子节点,则f[p]=f[p的子节点];3.若它有两个子节点,则f[p]=max(f[p的子节点]) + 1;对于3,如果我们考虑取左子树,则无论任取右子树中的哪一个,原创 2022-03-01 16:31:21 · 119 阅读 · 0 评论 -
P4551 最长异或路径 01字典树
link01字典树,xor,贪心思路求树上的最长异或路径。结论:一个数,如果它两次异或同一个数,那么它是不会有改变的。故 i,ji,ji,j 的路径上的异或和,就可以表示成根到 iii 的异或和异或上根到 jjj 的异或和。设 aia_iai 表示第 iii 个点到根结点的异或和。将 ai(1≤i≤n)a_i(1\leq i \leq n)ai(1≤i≤n) 加入集合 SSS,则问题等价于对每个i,求ai与S中某一元素的最大异或值 对每个i,求a_i 与S中某一元素的最大异或值对每个i,求a原创 2022-03-01 13:09:52 · 145 阅读 · 2 评论 -
Autochess 寒假训练赛 set
Link模拟,set题意看了半天发现就是模拟自走棋升级棋子过程,还蛮有趣的。m,n,km, n, km,n,k 分别代表加入棋子次数,位置个数,合成一个更高星的所需的个数。具体要求: 设当前加入的棋子名称为 sss。(每次加入的均为1星形态)if 若场上已有3星 sss ,直接跳过。else if,如果场上已有 k−1k-1k−1个1星 sss,则移除这些棋子,并在最左边的空位放一个2星 sss。如果此时有 k−1k-1k−1 个2星 sss,则以同样规则合成3星。else 如果场上有空位原创 2022-02-22 15:26:52 · 203 阅读 · 0 评论 -
P1801 黑匣子 对顶堆
link思路蛮经典的一道题,然而一直没做过总之就是用大根堆和小根堆来取代平衡树,由于询问的第 kkk 大是单调的,所以维护一个一直有 k−1k-1k−1 个元素的大根堆,对于每个新加的元素,若大根堆未满,则直接加入大根堆,否则判断它和大根堆堆顶大小,取二者中大的一个pop出并加入小根堆,这样保证大根堆元素数量为k−1k-1k−1,并且大根堆堆顶大小不超过小根堆堆顶,于是小根堆堆顶即为第 kkk 大。代码这个输入好迷惑,一开始没看明白,直接存成数组了。priority_queue<int&g原创 2022-02-21 22:58:24 · 182 阅读 · 0 评论 -
CF1632D. New Year Concert
LinkST表维护gcd, 2000题意给出 aaa 数组,若 gcd(al,al+1,...ar)=r−l+1gcd(a_l, a_{l+1},...a_r) = r - l + 1gcd(al,al+1,...ar)=r−l+1,则称区间[l,r][l,r][l,r]是boring 的。设 f(x)f(x)f(x)表示使这个数列的前x位不存在boring区间所需的最小修改次数(每次可以修改区间某个位置的值为任意值)。 依次输出f(1)到f(n)f(1)到f(n)f(1)到f(n)思路显然原创 2022-02-17 02:12:13 · 269 阅读 · 1 评论 -
poj2777 线段树染色
Link题意两种操作1.将[a, b] 改为颜色c2.询问[a,b] 有几种颜色很久没做过线段树了,温习一下。struct SegmentTree { int l, r; int col; int lz;#define l(x) tree[x].l#define r(x) tree[x].r#define col(x) tree[x].col#define lz(x) tree[x].lz}tree[maxn << 2];void push(in原创 2022-02-05 14:40:30 · 1057 阅读 · 1 评论 -
ICPC沈阳B题 —— 带权并查集
ICPC沈阳今天打比赛的题目,很快想到了方法但并查集写不对,太菜了,调很久才过题意给出n,m条限制,每条限制形如u, v, w,表示a[u] xor a[v] = w,构造一个数组a使得这n个数的和最小,若无法构造则输出-1.思路显然,如果不在m条限制中,则直接置0即可,否则对于每条限制,若两个点不在一个集合里,把两个点所在集合合并,每个集合存储一个根节点,z[i]存储第i个点与根节点的xor值,通过带权并查集把w转化成z[i],具体见代码。否则若z[x] xor z[y] != .原创 2021-11-21 21:02:55 · 336 阅读 · 0 评论 -
江西省赛补题G.Magic Number Group ——莫队
题意:找出一个p,让这个p尽可能多得整除区间内的数,问这个p最多能整除区间内的多少个数。思路:把每个数分解质因数,转化成求区间众数,进而使用莫队解决。// Decline is inevitable,// Romance will last forever.#include <bits/stdc++.h>using namespace std;#define mp make_pair#define pii pair<int,int>#define pb原创 2021-11-12 22:03:14 · 296 阅读 · 0 评论 -
CF1514D.Cut and Stick 2000 ——莫队求区间众数
题意:给定长度为n的序列a,q次询问,每次询问给定L,R,你可以将[L,R]中的数放进若干个盒子,要求满足每盒子中的众数出现次数<=(盒子中数总数+1)/2,问最少需要多少个盒子。数据范围:n,q<=3e5,a(i)<=n思路:莫队求区间众数// Decline is inevitable,// Romance will last forever.#include <bits/stdc++.h>using namespace std;#define原创 2021-11-12 21:13:37 · 185 阅读 · 0 评论 -
CF1594D. The Number of Imposters 1700 ——种类并查集*
题目链接和POJ1417相似题意:思路:种类并查集, 具体见代码注意判断矛盾的方法:如果两个节点的属于同一个集合 判断的是它们而不是它们的根节点(代码68行)最后统计个数的方法需要更加熟练!// Decline is inevitable,// Romance will last forever.#include <bits/stdc++.h>using namespace std;//#define mp make_pair#define pii .原创 2021-10-26 22:06:45 · 192 阅读 · 0 评论 -
2020第一届辽宁省赛E.线段树 ——exgcd + 逆元 + 线段树
题目链接题意: 中文题思路:题目要求维护区间两两数的乘积,可以转化为维护区间的平方和。需要用到逆元// Decline is inevitable,// Romance will last forever.//#include <bits/stdc++.h>#include <iostream>#include <cmath>#include <cstring>#include <string>#include原创 2021-10-19 22:54:52 · 105 阅读 · 0 评论 -
HDU4578 线段树维护区间平方和立方和
题目链接参考blog1参考blog2// Decline is inevitable,// Romance will last forever.//#include <bits/stdc++.h>#include <iostream>#include <cmath>#include <cstring>#include <string>#include <cstdio>#include <algorit原创 2021-10-18 14:44:23 · 288 阅读 · 0 评论 -
HDU4027 线段树区间取根号
HDU4027没什么难的注意如果l > r, swap(l, r)// Decline is inevitable,// Romance will last forever.//#include <bits/stdc++.h>#include <iostream>#include <cmath>#include <cstring>#include <string>#include <cstdio>#i原创 2021-10-09 13:12:21 · 84 阅读 · 0 评论 -
POJ3264 询问区间最值(不用维护
POJ3264简单板子// Decline is inevitable,// Romance will last forever.//#include <bits/stdc++.h>#include <iostream>#include <cmath>#include <cstring>#include <string>#include <cstdio>#include <algorithm>#i原创 2021-10-07 14:15:24 · 101 阅读 · 0 评论 -
ZOJ1610 线段树区间染色 ?
ZOJ1610为什么更新的时候r要-1啊啊啊啊题意:n次操作,每次对[l,r]染颜色d问最后剩几个颜色,如果某个颜色有剩余则输出这个颜色 并输出其有几段// Decline is inevitable,// Romance will last forever.//#include <bits/stdc++.h>#include <iostream>#include <cmath>#include <c原创 2021-10-07 00:42:04 · 87 阅读 · 0 评论 -
HDU1698 线段树板子 将区间改变为某个数
HDU1698题意:初始n个数每个数为1,每次操作使[l, r]的所有数变为d,求最终的n个数的和线段树的查询和更新一定要注意递归的也是r_change(p, l, r, d) l, r不变spread()中更新子树时它们的长度为子树的长度 不要忘记左移。// Decline is inevitable,// Romance will last forever.//#include <bits/stdc++.h>#include <iostream&原创 2021-10-06 21:42:49 · 188 阅读 · 0 评论 -
POJ2528 线段树离散化** + 染色
POJ2528参考题解// Decline is inevitable,// Romance will last forever.//#include <bits/stdc++.h>#include <iostream>#include <cmath>#include <cstring>#include <string>#include <cstdio>#include <algorithm>#i原创 2021-10-06 19:55:17 · 92 阅读 · 0 评论 -
P3372 线段树模板1
模板1,实现区间修改和求区间和1xyk 表示[x,y] + k2 x y 表示查询sum[x,y]// Decline is inevitable,// Romance will last forever.#include <bits/stdc++.h>using namespace std;#define mst(a, x) memset(a, x, sizeof(a))#define INF 0x3f3f3f3f#define int long longco...原创 2021-10-04 15:04:01 · 69 阅读 · 0 评论 -
P2801 教主的魔法 —— 分块+sort+暴力
P2801 教主的魔法写分块的时候一定要注意什么时候用l, r 什么时候用bel[x],bel[y],一不注意就容易出错// Decline is inevitable,// Romance will last forever.#include <bits/stdc++.h>using namespace std;#define mst(a, x) memset(a, x, sizeof(a))#define INF 0x3f3f3f3f//#d原创 2021-10-04 13:44:53 · 151 阅读 · 0 评论 -
P3372 分块过线段树模板
分块// Decline is inevitable,// Romance will last forever.//#include <bits/stdc++.h>#include <iostream>#include <cmath>#include <cstring>#include <string>#include <cstdio>#include <algorithm>#include <原创 2021-10-03 17:14:14 · 82 阅读 · 0 评论 -
UVA11235 频繁出现的数值 ——RMQ
蓝书p198题意:给出一个非降序排列的整数数组,回答一系列询问,找出[l, r]中出现次数最多的值所出现的次数。注意第52、55行对边界的处理由于数组从下标为0开始存储的,所以最后回答询问的时候l--,r--// Decline is inevitable,// Romance will last forever.//#include <bits/stdc++.h>#include <iostream>#include <cmath>#in原创 2021-10-03 13:58:13 · 95 阅读 · 0 评论 -
UVA4329 Pingpong ——树状数组+思维
蓝书P197不是很显然的树状数组题需要对于每个i,分别统计其左右两侧小于a[i]的人数数量。注意开long long注意人数上限2e4但是人的能力上限1e5, 更新C数组的时候要一直更新到1e5// Decline is inevitable,// Romance will last forever.//#include <bits/stdc++.h>#include <iostream>#include <cmath>#include &原创 2021-10-03 00:08:57 · 103 阅读 · 0 评论 -
P3368 树状数组模板 区间修改 单点查询
P3368用树状数组维护一个差分数组,sum(x)即表示数x注意一开始存储数据的方式修改区间[x, y]时只要add(x, d), add(y+1, -d)即可// Decline is inevitable,// Romance will last forever.//#include <bits/stdc++.h>#include <iostream>#include <cmath>#include <cstring>原创 2021-10-02 16:56:53 · 83 阅读 · 0 评论 -
CF1579E2 1700 ——逆序对 (但方法不一样
CF1579E2// Decline is inevitable,// Romance will last forever.//#include <bits/stdc++.h>#include <iostream>#include <cmath>#include <cstring>#include <string>#include <cstdio>#include <algorithm>#原创 2021-10-02 16:29:06 · 100 阅读 · 0 评论 -
P1908 逆序对 ——树状数组求逆序对模板
P1908求逆序对,注意可能有重复数字,排序的时候要注意,否则会waC[x]表示1-x中已经有的数字数量数组C中存的是正序对,所以每次操作要sum += i - sum(node[i].index),这样才是逆序对时间复杂度O(nlogn)// Decline is inevitable,// Romance will last forever.// P1908//#include <bits/stdc++.h>#include <iostream原创 2021-10-02 13:54:38 · 190 阅读 · 0 评论 -
POJ1984 Navigation Nightmare ——并查集 好题注意细节
注意合并x y集合时的操作:找到根结点fx fy,fa[fx] = fy, 接下来修改fx点的权值,这个值要考虑到点x和y和x y间的关系,具体见代码74-77先存下所有询问,然后离线做POJ1984题意:有多个点,在平面上位于坐标点上,给出一些关系,表示某个点在某个点的正东/西/南/北方向多少距离,然后给出一系列询问,表示在第几个关系给出后询问某两点的曼哈顿距离,或者未知则输出-1。思路:用east数组表示i到父节点需要向东走的距离,nor表示i到父节点需要向北走的距离(负值表示.原创 2021-10-01 21:26:22 · 85 阅读 · 0 评论 -
POJ1733 Parity game ——种类并查集+离散化
POJ1733题意:有n个结点,给出了q个操作,操作是a b string表示结点a到结点b的和是奇数或偶数,输出x(前x个操作都是正确的)。思路原创 2021-10-01 18:57:46 · 158 阅读 · 0 评论 -
POJ1456 Supermarket ——并查集 + 贪心 ?
POJ1456// Decline is inevitable,// Romance will last forever.// POJ1417//#include <bits/stdc++.h>#include <iostream>#include <cmath>#include <cstring>#include <string>#include <cstdio>#include <algorithm原创 2021-10-01 18:03:30 · 114 阅读 · 0 评论 -
POJ1417 True Liars ——种类并查集+01背包+路径** 好题
POJ1417题意:有n行输入形如x, y, str,str为yes表示x说y是天使,str为no表示x说y不是天使(x, y为天使,恶魔的编号,1<=x,y<=p+q);天使只说真话,恶魔只说假话;如果不能确定所有天使的编号,输出no,若能确定,输出所有天使的编号,并且以end结尾;注意:可能会有连续两行一样的输入;思路:注意到若回答yes,则x y必同种类,否则x y必异种类,所以通过种类并查集分类。维护完并查集之后并不能确定哪些是好人哪些是坏人,只能确定相对原创 2021-10-01 16:12:18 · 306 阅读 · 0 评论 -
POJ1182 食物链 ——并查集** 经典题目
POJ1182POJ-1182 食物链_飘过的小牛-CSDN博客注意find函数的temp// Decline is inevitable,// Romance will last forever.// POJ1182//#include <bits/stdc++.h>#include <iostream>#include <cmath>#include <cstring>#include <string>原创 2021-10-01 14:22:11 · 105 阅读 · 0 评论 -
POJ1611 The Suspects ——并查集
POJ1611题意:有n个人,编号0-n-1,给出m个集合,问一共有多少个人和0号在一个集合。思路:直接并查集即可// Decline is inevitable,// Romance will last forever.// POJ1611//#include <bits/stdc++.h>#include <iostream>#include <cmath>#include <cstring>#inclu.原创 2021-10-01 12:26:55 · 127 阅读 · 0 评论 -
POJ2236 Wireless Network ——并查集
POJ2236原创 2021-10-01 12:08:45 · 91 阅读 · 0 评论 -
CF1534C. Little Alawn‘s Puzzle 1300 ——并查集(搜索)
CF1534C参考并查集代码// Decline is inevitable,// Romance will last forever.// CF1552C. Maximize the Intersections#include <bits/stdc++.h>using namespace std;#define mst(a, x) memset(a, x, sizeof(a))#define INF 0x3f3f3f3f#define mp make_pair原创 2021-09-26 23:30:35 · 93 阅读 · 1 评论