
数据结构
TURNINING
太蒻了
展开
-
2022杭电多校第二场 A.Static Query on Tree
代码】2022杭电多校第二场A.StaticQueryonTree。原创 2022-07-21 19:28:02 · 381 阅读 · 2 评论 -
P2184 贪婪大陆
传送门题意:有两个操作 1:在l,r上放上一条线段 操作2:l,r被多少条线段覆盖。思路:通过思考可以发现 前端在r之前的线段都可能覆盖[l,r],那么只有其中后端在l之前的线段不会覆盖,覆盖的就是两者之差。线段树/数状数组维护#include<bits/stdc++.h>using namespace std;#define lsn (u << 1)#define rsn (u << 1 | 1)#define mid (l + r >>原创 2021-07-16 16:59:48 · 153 阅读 · 0 评论 -
Codeforces Round #717 (Div. 2) D. Cut
传送门题意:数组有n个数,有q次询问,每次询问给你一个区间l,r,问[l, r]最少的划分次数是多少。划分的规则为:每个划分后的区间每个数都互质。思路:对于每次询问,要想划分次数最少显然我们得贪心的令子区间的长度最长。求子区间的最长长度思路很简单,从i开始一直往后遍历一直到gcd不为1为止(互质)。现在我们就可以得到以i开头,最长的划分区间了。对于每次询问我们就可以直接算次数了。但我们能直接暴力的算次数吗?显然不行,当每个数都为1时可以把我们卡上天。那怎么办? 倍增现在我们思路都已经很清楚了,那么怎么原创 2021-07-14 11:23:25 · 150 阅读 · 0 评论 -
Codeforces Round #705 (Div. 2) D. GCD of an Array
传送门题意:给你一个数组含有n个数,同时进行q次操作,每次操作让x位置上的数乘上v,每次操作后输出给个数组的gcd。最大公约数:于是我们有这样的想法,对于每个素数,我们维护n个数中的最小值。显然区间最小值可以用线段树维护,但那样我们不是要开s课线段树?内存显然不够用。1.考虑离线处理 每次算乘上这个数后对结果的贡献(指数是相加的),同样对于刚开始的n个数,我们可以看作最开始每个数都是1,然后依次乘上ai。每次算贡献 我们可以一次把所有p的贡献算完,算完后再清空线段树就可以重复利用了。#incl原创 2021-07-13 19:03:47 · 186 阅读 · 0 评论 -
Codeforces Round #731 (Div. 3) F. Array Stabilization (GCD version)
传送门题意:给你含有n个元素的数组,每一次操作把ai变为gcd(ai, ai+1)。问最少需要多少次操作可以令数组的所有元素相等。思路:首先我们可以反应过来最后相等的元素就是数组所有元素的gcd,当我们进行k次操作时,ai = gcd(ai, ai+1, ai+2,…,ai+k)。同时我们发现答案是线性的,可以二分,问题是怎么快速得到k操作后每个元素的值。线段树或者ST表就行了,关于ST表有一篇不错的文章。传送门哦对了这种成环的数组可以化环为链,长度为2*n,比较好维护一些。线段树版本#inclu原创 2021-07-12 20:35:25 · 191 阅读 · 0 评论 -
P4551 最长异或路径
传送门异或的性质:满足交换律满足结合律0异或任何数等于那个数本身写一个关于这种树上异或路径的小总结:设dis(i, j)为i到j的异或路径,k为该树的root,那么有 dis(i,j) = dis(k, i) ^ dis(k, j);证明如图思路: 求出任意点到根节点的异或路径,然后把这些值存到trie中。根据贪心的性质,我要尽可能的让高位为1,剩下的位能为1就尽量为1。trie能很好的进行这些操作。#include<bits/stdc++.h>using namesp原创 2021-07-07 11:20:07 · 142 阅读 · 0 评论 -
HDU - 4578 Transformation
传送门题意:操作1:l r 加上 c操作2 : l r 乘上c操作3:l r 全部变成c操作4:求l r 每个元素的p次幂的和思路:显然是线段树,这题主要卡在了在pushdown的时候不知道是先乘,还是先除。看了dalao的博客后是这样解决的,假设我们先 * muti 再 + add :a * muti + add 没有任何问题,但我们先 + add 再 * muti :a * muti + add * muti;于是我们可以看出来了,每次乘不仅lazy_muti 要乘上muti且lazy_ad原创 2021-05-28 17:15:55 · 142 阅读 · 0 评论 -
Educational Codeforces Round 109 (Rated for Div. 2) C. Robot Collisions
传送门题意:有一些机器人分布在x轴上,各自向左右以1个单位每秒的速度行动。仅当相遇在整数位置时两个机器人发生爆炸。撞到墙了即反向。思路:首先观察发现,x为奇数的只可能与x为奇数的相撞,同理偶数。故奇偶得分开求。从左往右,当第一个机器人向右运动时,没有人与它相撞。当第二个机器人向左运动时,当第一个机器人向右运动时两者相撞。那么当第三个机器人向左运动时,什么情况会发生相撞呢?即:第一个向右运动的机器人会和他相撞。于是我们可以看出来,其实这是一个栈,存的是第一个向右运动的机器人。当当前机器人向左运动.原创 2021-05-18 00:02:26 · 241 阅读 · 2 评论