首页 > 其他分享 >Codeforces Round 893 (Div. 2)

Codeforces Round 893 (Div. 2)

时间:2024-03-04 15:11:49浏览次数:29  
标签:893 l0 删除 text Codeforces len 数组 操作 Div


\[\large \text{Round 3 : Codeforces Round 893 (Div. 2)(VP)} \]

一言:
从你站在桥上看我的那一刻起你就是我的世界
——火影忍者

不是很满意,还是没有突破 \(\text{D}\) 题,确实是没有想到这题竟然如此毒瘤。。

\(\text{D: Trees and Segments}\)

首先不难想到一种思路,就是枚举 \(l0\),然后预处理出在得到 \(l0\) 时,能够得到最大的 \(l1\) 是多少,假设这个值为 \(d_{l0}\)。

显而易见的,\(0\) 的连续段不是在 \(1\) 连续段的右边就是在他的左边,所以考虑维护四个数组来辅助得到 \(d_{l0}\):

定义 \(l1_{i,j}\) 表示以 \(i\) 结尾,得到长度为 \(j\) 的最大 \(0\) 串需要的最少操作数。

\(l2_{i,j}\) 表示以 \(i\) 开头,得到长度为 \(j\) 的最大 \(0\) 串需要的最少操作数。

显然,对于 \(1\) 串,为了方便求出 \(d\) 数组,我们就需要换一种定义方式:

定义 \(r1_{i,j}\) 表示使用 \(j\) 次操作,得到的以 \(i\) 结尾的最大连续 \(1\) 串的长度。

\(r2_{i,j}\) 表示使用 \(j\) 次操作,得到的以 \(i\) 开头的最大连续 \(1\) 串的长度。

显然对于上述数组,我们可以通过枚举任意一个子区间 \([l,r]\),获取其变为 \(0\) 串,或者 \(1\) 串的代价,然后带回上述的几个数组中来求解。

所以有 \(d_j = \max{\ r1_{i - 1,k-l2_{i,j}},r2_{i+1,k-l1_{i,j}}}\)。

但是还有一个问题,这样求出的 \(d_i\) 两个连续 \(01\) 串根据定义是必须靠在一起的,实际上却可以是不连续的,所有我们要对 \(r1\) 求一个前缀 \(\max\),\(r2\) 求一个后缀 \(max\) 再套入刚刚 \(d_j\) 的公式。

另外,也要处理好一些边界值的细节。以及不能 \(\text{memset}\) 真的好烦啊!

\(\text{Submission}\)

\(\text{F: Rollbacks (Hard Version)}\)

看完题解之后,感觉这个题是真的妙啊。

由于这道题是 \(\text{E}\) 的加强版,所以就直接忽略这道 \(\text{E}\) 了。

首先,为了让题目更加简单,我们可以直接不考虑这个删除操作。

那么显然由于是要求不同的数字,所以实际上只有每个数出现的第一个位置是有意义的,那么我们可以考虑维护一个 \(\text{set}\) 来储存每个数出现的位置。然后还有单点修改,所以可以维护一个树状数组,来把有意义的点储存进去。

具体来说,对于插入操作,将这个数放入 \(\text{set}\),然后并根据 \(\text{set}\) 来单点修改树状数组。对于查询操作,假设当前有 \(\text{len}\) 个数,那么直接在树状数组中查询 \([l,\text{len}]\) 的有效值总和。

重点是这个删除操作,实际上我们可以直接令 \(len = len - k\),仔细想可以发现,如果我们想要撤销到这个删除,那么必然在撤销这个删除的上一个状态就是这个 \(len = len - k\) 这个状态,所以到时候直接在撤销的时候把 \(len\) 加回来即可。

至于插入操作的撤销,这个还是很简单的,就不细说了。

实际上在代码实现的时候,是还可以更简单的。

\(\text{Submission}\)

\(\text{What I learned:}\)

  • 当求两个独立的区间的贡献时,可以考虑枚举两个区间的相对方位,然后通过一些预处理进行维护。

  • 如果既有删除操作,有些时侯又要撤销这个删除操作,那么可以考虑在删除的时候只将数组的最后一位向前挪,并不改变实际的值。

  • 维护一个序列有多少个不同的数时,可以只将每个数第一次出现的位置设为贡献 \(1\),其余位置都不存在贡献。

标签:893,l0,删除,text,Codeforces,len,数组,操作,Div
From: https://www.cnblogs.com/SFsaltyfish/p/18051857

相关文章

  • Codeforces Round 806 (Div. 4) A-G(补题)
    A.YESorYES?思路:一次判断三个字母是否是y、e、s的大小写即可。这题是很久前写的,哈哈,马蜂改了不少。。#include<bits/stdc++.h>usingnamespacestd;intn;chars[5];intmain(){ scanf("%d",&n); for(inti=1;i<=n;i++){ scanf("%s",s+1); if......
  • 光标自动定位到起始位置contenteditable="true" ,v-html绑定内容,div可编辑时,光标移到最
    出现这个问题原因:(1)通过打断点可以看到,当你输入的时候触发input事件,提交值给父组件中的v-model;(2)但因为在子组件中又监听了v-model的值,所以整体形成了闭环;(3)还需要重点说明的是光标问题,contenteditable与v-html所在的元素值的改变如果不是通过输入而是通过赋值实现,光标就会跑到最......
  • 16 Educational Codeforces Round 142 (Rated for Div. 2)C. Min Max Sort(递归、思维
    C.MinMaxSort很不错的一道题目,不过脑电波和出题人每对上,\(qwq。\)正难则反。我们考虑最后一步是怎么操作的。最后一步一定是对\(1\)和\(n\)进行操作那么上一步呢?上一步应该是对\(2\)和\(n-1\)以此类推第一步应该是对\(\frac{n}{2}\)和\(\frac{n}{2}+1\)我们的答案应该......
  • Educational Codeforces Round 143 (Rated for Div. 2)C. Tea Tasting(前缀和+二分、
    C.TeaTasting思路这里枚举有三种思路然后经过考虑3是最可行的,然后接着考虑如何计算贡献这里在实现的时候用了一个差分数组,因为我们需要记录第i个茶师它喝了多少个\(b_i\)以及不满\(b_i\)的用\(c_i\)记录,最后计算一下答案即可。#include<bits/stdc++.h>#defineintlon......
  • Codeforces Round 930 (Div. 2)
    目录写在前面ABCDEF写在最后写在前面比赛地址:https://codeforces.com/contest/1937。被交互杀死的一集。赛时卡C明天有早八就直接睡大觉了,第二天看看D一眼秒了,最困的一集。A签到发现1会被先后交换到2,4,8,16……输出\(2^{\left\lfloor\logn\right\rfloor}\)即可。......
  • D - Diversity of Scores
    D-DiversityofScoreshttps://atcoder.jp/contests/abc343/tasks/abc343_d 思路准备两个map第一个存储,每个分数作为key,以及得此分数的运动员列表作为value这样,可以非常快速统计出某一时刻所有分数总数。第二个存储,每个运动员作为key,以及此运动员当前的分......
  • Codeforces Round 931 (Div. 2) A-D2
    A.TooMinTooMax贪心、排序。对数组排序后,显然当下标\(i\)、\(j\)、\(k\)、\(l\)分别选择\(1\)、\(n\)、\(2\)、\(n-1\)时求得最大值。时间复杂度:\(O(nlogn)\)。#include<bits/stdc++.h>usingnamespacestd;#definecctieios::sync_with_stdio(0);cin.tie(0)......
  • Codeforces Round 926 (Div. 2)
    A-SashaandtheBeautifulArray难度:⭐题目大意给定一个长度为n的数组,其分数为An-An-1+An-1-An-2...+A2-A1;问如何排列可以让该数组的分数最大;解题思路就是让An-A1最大;神秘代码#include<bits/stdc++.h>#defineintlonglong#defineIOSio......
  • Codeforces Round 931 (Div. 2)
    CodeforcesRound931(Div.2)比赛链接A.TooMinTooMax思路这题一开始我以为就是简单的模拟一下,四个for循环可能就可以,事实上并不是,因为我们想让最后的值最大,所以我们可以将数组进行排序,之后我们从最左边取两个,最右边取两个,插着求绝对值的和就行Code#include<bits/stdc......
  • Codeforces Round 911 (Div. 2) vp D题
    前面三题,就B题一道900的题目让我wa了两发,而且有点难看出来主要是想不到。。不知道该怎么像。应该算是题目理解不清晰吧,很麻烦。。这个原因可以说是没有一个完整的思考路径,我能够直接想到答案接近的处理方法,但是细节上没有注意。在考虑问题的时候可能。。需要慢一些,太快了,容易漏......