笔记
文章平均质量分 66
dplovetree
华东师大 数据学院在读
展开
-
[Ynoi2016] 镜中的昆虫——浅谈区间种类数问题
这里给出另一种常见的做法:通过将询问离线,把询问挂到区间右端点上,再通过记录每个元素上一次出现的位置,扫一遍序列的同时,用树状数组维护每个左端点到当前右端点。那么想要求区间种类数,一个常见的套路是:区间中所有相同的元素,只有区间中最左边的位置做贡献。个点,一个赋值操作,最多能增加三个点(因为有可能把原本是一段的点,割开了),且每个点最多只能删除一次,那么。的矩形中有多少个点,天哪,多么经典的二维数点问题!那么这个问题中的颜色相同的一段 等于 上个问题中的一个点,从上面的证明我们知道,这是十分经典的问题;原创 2022-09-19 10:32:49 · 513 阅读 · 2 评论 -
CCPC长春2020 复现报告
签到:A、D铜牌题:F银牌:J、KA - Krypton思路:题目会有一个误区,很容易让人去想贪心(毕竟首充大的,奖励大嘛有一种情况就是,我如果拿了尽可能大的,就没钱去买小的了,但是如果把小的全买了,奖励是更多的。所以就枚举所有情况,二进制枚举,买哪些喽;#include<bits/stdc++.h>using namespace std;#define ll long longint s[]={1,6,28,88,198,328,648};int a[]={8,原创 2021-11-04 13:16:24 · 184 阅读 · 1 评论 -
树上分治算法 + 路径剖分
树上分治算法 + 路径剖分感谢qzc大佬的论文上个学期就听说了点分治,但是一直没学过,看了da lao的论文后,醍醐灌顶。我们熟悉的分治 是 线性的分治(参考归并排序)。树上分治就是把一个大的关于路径的问题,变成一个个小问题组成,大问题的答案可以由小问题的答案合并而来。点分治POJ1741点分治模板题,统计树上点对间距离小于等于K的对数。#include<cstdio>#include<algorithm>#include<vector>using n原创 2021-10-20 23:16:56 · 402 阅读 · 0 评论 -
Distance on the tree 树上主席树
Distance on the tree题意:给你一颗带边权的树,点数n<=1e5n<=1e5n<=1e5,询问1e51e51e5次,每次询问两个点之间的简单路径,有多少条边权小于等于 K 。思路:第一反应,树剖啊,但是不能加线段树,那么什么能支持区间查询小于等于K的数呢,当然是主席树!复杂度就是O(nlog2nnlog^2nnlog2n)。但是有更好的写法:树上主席树!参考线性主席树利用前缀和的想法,树上主席树也是前缀和的一种, 我们把自己的权值并上父亲的权值,变成一个新的原创 2021-10-19 20:41:30 · 147 阅读 · 0 评论 -
2021-10-06 组队赛——2019-icpc-Seoul-题解
Problem K Washer题意:给你三维平面上的n<=100n<=100n<=100个点,将他们最多分成k<=2k<=2k<=2类。每一类的价值是,要求使所有类的价值和 最小,输出最小值。任意三点不共线,任意四点不共面。思路一:这个价值函数类似于方差,就是要让分出的类,尽可能地聚合。考虑用K-means算法。1)考虑先随机k个聚合点,2) 然后每次把其他点,归属到距离最近的聚合点3) 把每个聚合点调整到 属于他的那个点集最靠近质心的点重复 第原创 2021-10-09 22:19:41 · 154 阅读 · 0 评论 -
[SDOI2016]游戏
[SDOI2016]游戏思路:树剖+李超线段树李超线段树模板题,把对一条链的操作变成李超线段树上一段区间的操作。维护李超就像普通的维护直线一样,但是每个区间加个标记,代表在自己下面的区间直线所出现的最小值,这样就保证了复杂度。把一条链拆成从sss到lcalcalca,从lcalcalca到ttt的两个线段。普普通通的AC吧;#include<bits/stdc++.h>using namespace std;#define ll long longint n,m;struc原创 2021-10-09 13:32:09 · 694 阅读 · 1 评论 -
二分图King
L:Fat题意:思路:二分图匹配。tips:对于这种垃圾题目,贪心不行,dp不能的题目。就想想图论吧,网络流从不会让你wa,最多只会T。#include<bits/stdc++.h>#define rep(i,n,m) for(int i=n;i<=m;i++)typedef long long ll;using namespace std;struct node{ ll x,y,v;}maxn[40005];node minn[40005];node b原创 2021-10-07 21:31:30 · 72 阅读 · 2 评论 -
Codeforces Round #744 (Div. 3) 解题报告
文章目录A. Casimir's String SolitaireB. Shifting SortC. TicksD - Productive MeetingA. Casimir’s String Solitaire题意:对于一个字符串,有两种操作:1、选择字符串中的一对‘A’和‘B’,删除他们;2、选择字符串中的一对‘B’和‘C’,删除他们;问能否通过一系列操作把字符串变成空串。思路:计三种字符的个数,只要’B’的个数是’A’和‘C’的个数和即可。代码:#include<bits原创 2021-09-29 22:02:36 · 277 阅读 · 1 评论 -
Educational Codeforces Round 114 (Rated for Div. 2) D
D. The Strongest Build题意:给你nnn个位置(n<=10n<=10n<=10),每个位置有cicici个备选的数(ci<=200000ci<=200000ci<=200000),然后有mmm个组合(m<=200000m<=200000m<=200000),求除了这些组合之外的 和最大的组合,输出最大和。思路:根据mmm个限制,建一颗字典树,然后遍历字典树,在当前点,保证取当前点到根的数,下面的位置贪心取,遍历完字典树之后的最原创 2021-09-29 12:41:57 · 136 阅读 · 1 评论 -
2021-09-11 训练场补题
C - Family View题意:给你nnn个模式串,模式串中只有小写字母,模式串长度之和len<=1e6len<=1e6len<=1e6,然后给你一个匹配串len<=1e6len<=1e6len<=1e6,匹配串由全字符集组成。要求将匹配串中的所有和模式串匹配的子段替换成 ‘*’ ;思路:优化AC自动机;普通的AC自动机在匹配的时候会暴力跳fail指针;也有建fail 树来统计每个匹配串在文本串中出现的次数的优化。但是这道题我们只用在匹配的地方加个标记,记录长原创 2021-09-16 16:36:59 · 119 阅读 · 2 评论 -
bzoj3188 Upit
题意:思路:类似于线段树维护标记。区间赋值,优先级最高,直接对和进行维护。区间加等差数列就可以把标记设为 :首项和公差,这样区间加等差数列的标记就能合并了。再套平衡树就好了。ops:第一道比赛中做的平衡树的题。因为当时状态比较拉跨,并且区间加等差数列的标记和之前一个线段树加等差数列的平方 的标记搞混了,觉得不能做。知道标记的维护方式,那他就成了裸裸的模板题了。在这里插入代码片#include<bits/stdc++.h>using namespace std;#define原创 2021-08-27 03:08:18 · 126 阅读 · 0 评论 -
Codeforces Round #740 Div. 2 解题报告
A. Simply Strange Sort模拟题意:给你一个长度为nnn (nnn<=1000 且 nnn是奇数) 的排列;有一种操作,定义第iii次操作:如果iii是奇数,对所有奇数位置pospospos(pospospos<n),如果 第pospospos位大于第pospospos+1位,那么交换。如果iii是偶数,对所有偶数位置进行上面那个操作;求在第几次操作之后,整个序列有序。思路:因为给的nnn很小,对于一个数,他回到原本的位置,最多需要nnn次操作,那么nnn个数原创 2021-08-25 02:20:51 · 320 阅读 · 2 评论 -
线段树合并——小学六年级必读经典
线段树合并是对于权值线段树来说的。前置知识:权值线段树,动态开点线段树;如果以上两个知识点都还没点亮的话,建议出门右转,我帮你 return( bushi那么我们就发车啦!线段树合并,顾名思义,就是建立一颗新的线段树保留原本两个线段树的信息。考虑 我们合并到线段树a,线段树b的pos位置上:如果a有pos位,b没有,直接return a;如果b有pos位,a没有,直接return b;如果已经合并到叶子节点了,就直接把b上pos位的值加到a的pos位上,return a;递归处理左右子原创 2021-07-23 20:06:09 · 445 阅读 · 0 评论 -
2021-07-22
SOS DPMr.I has two sequence Ai and Bi of length n,(0≤i≤n−1).Define an array C of length n, where Ck=max{AiBj}, satisfying (i&j≥k).& is the button under binary Bitwise AND operation.Please calculate the value of ∑n−1i=0Ci, modulo 998244353.The原创 2021-07-22 22:06:37 · 183 阅读 · 0 评论 -
2021-7-16 个人赛 补题
No Time to Dry题意:给你2e5个数,和2e5组询问。序列代表的是最后涂成的油漆,大的数只能涂在小的数上面,而小的数不能涂在大的数上面。每次询问一个区间,求最小的操作数使得涂成上面需要的序列。思路:线段树 + 单调栈涂油漆必备套路,单调栈,能预处理处最初的涂色操作数。这道题的核心在于 离线(想到了,可惜没写),这个数据量在线是不可能的。先把处理出next数组,就能跳同一个数的下一个位置,那么我们就把询问离线,按照l为第一关键字,r为第二关键字排序,当区间的左边界移动时,用nex原创 2021-07-16 21:31:26 · 89 阅读 · 0 评论 -
2021-7-15 个人赛 补题
Do You Know Your ABCs? 2题意:给你N个数( 4<=N<=7 ),分别是A、B、C、A+B、A+C、B+C、A+B+C中的N中;已知1<=A<=B<=C,求根据给出的数,能确定多少种三元组(A.,B,C);思路:根据鸽巢原理,从给定的至少四个数中,一定能得出A+B+C,不是已经得到了就是可以从已知的某两个数中加出来,这样就得到了A+B+C;同样根据鸽巢原理,我们用得到的A+B+C减去原来的 X 那么至少能得到A、B、C中的两个,这样我们从原来的原创 2021-07-15 19:38:36 · 87 阅读 · 0 评论 -
2021-7-14 个人赛 补题
D:Cow Photography II题意:n头牛(n<=20000),有一个隐藏序列。题目提供五个序列,都是从隐藏序列变化过来,每次可能有0头或多头牛会移动,但在五个序列中,每头牛最多只能移动一次,要求还原最初的隐藏序列。思路:因为每头牛最多只会移动一次,所以任意两头牛的先后次序最多只会改变两次,所以在五张照片中,序号在前面多的牛,排在前面。根据复杂度我们可以通过sort+重写比较函数来n logn地还原隐藏序列。这道题在比赛中做了好久,一个半小时都没做出来。想到了依靠先后次序关系,原创 2021-07-14 20:10:01 · 142 阅读 · 0 评论 -
2021-7-13个人赛 补题
G:Dance Mooves I题意:n头牛排成一排,初始时编号为i的牛在第i个位置有k次交换,每次会交换a,b两个位置的牛这k次交换将按顺序,无限循环执行下去最后问每头牛能够到达的位置的个数题解:可以先按照题意模拟一遍,求出k次交换后每头牛所在位置p[i],并记录在这k次交换中每头牛到过的地点的集合题目要求无限次循环交换,但可以发现,加入编号为i的牛经过一遍交换后到达位置j,编号为j的牛经过一遍交换后到达位置k,那么编号为i的牛在经过两遍交换后也能够到达位置k(路径继承性)所以可以借助并原创 2021-07-13 21:07:15 · 104 阅读 · 0 评论 -
2021-7-12 个人赛 补题
B:Above the Median题意:给你一个大小100000的序列,求出有多少区间他们排序之后的中位数大于等于X。最开始的想法就是大于等于X的数赋值为1,小于X的数赋值为0,那么满足条件的区间就是 区间和大于等于区间长度的一半( sum > = (len + 1) / 2 )考虑优化 n²的复杂度,参考倍增的思想,如果一个区间中1的数量为 x,此时的区间长度为 len,那么此时的指针可以直接跳到(2*x+1)的位置,此时不管跳过的区间中 0 / 1 的情况是怎么样的,都满足条件,那么直接加原创 2021-07-12 21:37:13 · 137 阅读 · 0 评论