AtCoder题解
文章平均质量分 63
Floze3
这个作者很懒,什么都没留下…
展开
-
[ABC350F] Transpose 题解
AT 不会出题可以不出,放个板子什么意思?很显然,如果我们不需要考虑每个字符的大小写,这就是一道文艺平衡树的板子题,只需要一边进行括号匹配,一边翻转区间即可。对于大小写的处理,我们注意到,只有当一个字符被奇数个匹配括号对包围时才需要改变大小写,那么我们可以利用差分的方式统计包围每个位置的匹配括号对数,最后中序遍历输出答案即可。原创 2024-05-04 16:30:44 · 231 阅读 · 0 评论 -
[ABC348F] Oddly Similar 题解 返回题目
我们可以转换统计思路:对每一列数字相同的数列进行统计,最后再进行汇总。注意到NNNMMM、值域都极小,我们考虑使用 bitset。具体而言,我们对于每一列进行扫描,使用一个 bitset 数组bbb统计在这一列上,所对应元素的值相同的数列。同时,我们再开一个统计答案的 bitset 数组ansansans,统计在这个数列之前,哪几个数列有着奇数个与其相同的元素。我们利用 bitset 之间可以异或的特点,设当前的位置为ij(i, j)ij,在当前列扫描到当前数列时,将an。原创 2024-05-04 16:23:10 · 881 阅读 · 0 评论 -
[ABC351F] Double Sum题解
AT 不会出题可以不出,又放个板子什么意思?我们想到,对于一个数AiA_iAi,记在它之前的数有cntcntcnt个,这些数的和为sumsumsum,那么这个数所产生的贡献即为Ai×cnt−sumAi×cnt−sum。考虑扫描线算法,用两个树状数组分别统计小于等于某个数的个数以及这些数的和,一边统计答案,一边把当前的数插入树状数组中。注意到值域为10810^8108,因此我们需要离散化。原创 2024-05-03 18:01:55 · 509 阅读 · 0 评论 -
[ABC339G] Smaller Sum 题解
比较明显的分块题,考虑用一个 b 数组存储 a 数组中每一个元素,分块之后再在 b 数组上对每一个块内元素进行排序。排完序后,对每一个块做一个前缀和,便于求和。对于每一次查询,对于覆盖了一整块的区间询问,可以用在 b 数组上二分查找的方式找出区间内小于等于 x 的元素之和;而对于没有覆盖一整个块的区间询问,直接暴力统计即可。唯一要注意的事情:块长不能开为。原创 2024-05-03 16:14:55 · 441 阅读 · 0 评论 -
[ABC341E] Alternating String 题解
原题链接思路简述看到题目中有着区间修改,区间查询的要求,不难想到此题可以利用线段树通过。首先,对于一个区间的合法性,反转后并不会改变;同时我们注意到,一个区间的合法性,只与它的两个子区间的合法性,以及左儿子区间最右边的值是否等于右儿子区间最左边的值有关。不难想到,我们的线段树上要维护的是这个区间是否合法,区间最左边的元素的值以及区间最右边的元素的值。代码如下:struct node { // 左端点,右端点,最左边元素的值,最右边元素的值,懒标记 int l, r, lv, rv, ta原创 2024-05-03 16:10:25 · 231 阅读 · 0 评论