04 2021 档案
摘要:这道题的初始思路可以看的出来 是一道分治的思想,这种题往往枚举端点计算贡献 而这一题因为有个最大值的限制,所以我们考虑维护每个点作为最大值的答案 那么一般来说,都是在区间内,枚举首位,然后二分答案,但是这样复杂度会退化,例如一个很长的递增子序列 因此我们考虑启发式合并,前缀和后缀哪边小枚举哪边,这样
阅读全文
摘要:要选出价值最大的链且不相交。 比较朴素的想法就是树dp,对于一个子树,如果这个点在一条链上,我们可以考虑是否选这个链,然后把这条链上的点单独考虑,对于剩下的子树直接求和即可 但是由于两个点不一定在同一条到根的路径上,因此我们对于每条链,都把他存到lca的位置上再考虑 画一下图,我们可以发现只要在当前
阅读全文
摘要:显然,根据题目给定的数据,结果是一些森林 对于每个森林都可以取一些数使得答案最大 又因为必须到根都取掉,我们设计状态为f[i][j],表示以i为根,取j个的答案 对于树上跑一个01背包,然后对于整个森林跑一下分组背包 #include<bits/stdc++.h> using namespace s
阅读全文
摘要:转化题目,题目要求的是K级祖先,我们可以对于每个询问先跳到祖先,那么就是求对于这个祖先,depth[u]+k的个数是多少个,然后-1就是答案 #include<bits/stdc++.h> using namespace std; typedef long long ll; typedef pair
阅读全文
摘要:考虑倒序dp 设计状态f[i]为到末尾的最小不存在子序列。 首先如果后面没有某个字母,那么答案就是1 不然的话必然要在首位加上一个字母。 考虑枚举所有情况,也就是第一个字母填什么,这样就是全部答案。 如果直接枚举后面每个位置更新,复杂度太高,我们想到维护一个后缀,表示每个字母在i和之后出现的第一个位
阅读全文
摘要:无题解,纯记录比赛 本来以为是线下,后来改成了线上,变成了学校机房一日游~~ 因为和ec冲突了,所以走了一波强队,感觉比赛会简单一点(据说好多队伍直接西安打浙江省赛,妙啊) 中午买了面包就等开始比赛了 正赛: 开局等我打好前面的预备代码,队长表示已经会A了 过了A后,三个人分开看题。 M是一道思维题
阅读全文
摘要:A题 我写的是找是否存在两个1之间有0,并且要特判单一个1的情况 #include<bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<int,int> pll; const int N=2e5+10; con
阅读全文
摘要:首先破环成链,因为图中是一个环,所以转化成有n种可能性的链。 输入如果右端点小,就+m 一个显然的贪心是,既然选择当前点,那么下一个点的左端点越靠近当前点的右端越好 这个成立的原因是,没有两个线段存在包含关系,因此左端点越右,右端点越右,这样覆盖的会尽可能的远。 之后就可以用倍增优化进行跳跃,直到覆
阅读全文
摘要:A题 线段树+欧拉降幂 题目要求的状态只有30种,所以对于每次操作,我们可以枚举所有的情况,计算他的转移方向,我们用lazy标记表示这个数操作完后的状态,打个懒标记 然后对于询问的时候,只要询问每个数的个数即可。对于快速幂的情况,普通快速幂因为太慢,所以考虑使用欧拉降幂来加速 #include<bi
阅读全文
摘要:A题 贪心从10开始 #include<bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<int,int> pll; const int N=1e6+10; const int mod=1e9+7; int
阅读全文
摘要:第一次遇到有9题的div2。。。 A题 排序后,伸展两边 #include<bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<int,int> pll; const int N=2e5+10; const i
阅读全文
摘要:这题需要一点思维转化,感觉还是挺有意思的。 我们仔细观察选点的要求,发现,根要小于左右子树,左子树选的要大于右子树 因此,将他按根-右-左遍历之后,求一遍最长上升子序列就是答案 #include<bits/stdc++.h> using namespace std; typedef long lon
阅读全文
摘要:这道题可以使用启发式合并和延迟的策略来做 首先我们发现第一个操作就是将两个集合合并,要在合理的复杂度之内做到此事,启发式合并是个好办法 其次,因为我们需要查询的是最大值,因此用堆来维护也比较方便,但是现在有个问题,因为一些权值会被改变 而堆不能指定元素删除,因此如果要维护这些值,暴力的做法是把这个值
阅读全文
摘要:这道题看到操作4就能想到使用可持久化数据结构 对于这一题的初始想法,是把二维映射到一维,前两个操作是单点修改,第三个是区间01反转 感觉应该是可做的,但是不太好写。 一种好写的做法是,维护行,对于每行维护一个bitset,这样三种操作就都很容易做了 #include<bits/stdc++.h> u
阅读全文

浙公网安备 33010602011771号