首页 > 其他分享 >CF Round 881 (Div. 3)

CF Round 881 (Div. 3)

时间:2023-06-26 10:47:06浏览次数:45  
标签:suf 881 submission 1843 codeforces CF https Div com

CF Round 881 (Div. 3)

Div. 3 果然简单,虽然但是,我还是有 1 道题没有想出来。

A.Sasha and Array Coloring

排序双指针向内即可。

https://codeforces.com/contest/1843/submission/210855587

B.Long Long

好啊,就是这道题没想出来。

Virtual Contest 上完成了一半。

考虑把符号相同(0 与任何数符号相同)的合并。

因为放在一起操作显然最优。

bool sgn_eq(int x, int y) {
    return (x * y) >= 0;
}

然后你就得到了一个 ... + - + - ... 正负交替的序列。

那么,很明显,正数与负数的个数相差不超过一,也就是说花费 1 的代价将负数转化为正数的行为是不可取的(我就死在这上面,如此弱智的东西……),于是记录所有负数的个数即可。

有可能溢出,要精细实现

https://codeforces.com/contest/1843/submission/211085413


也可以直接合并负数序列(忽略 0 的情况)

https://codeforces.com/contest/1843/submission/211082437

C.Sum in Binary Tree

会手写堆的人都会写……

Submission #210856724 - Codeforces

D.Apple Tree

弱智题……记录一下每一个节点有多少个叶子节点。输出相乘的结果即可。

https://codeforces.com/contest/1843/submission/210857337

E.Tracking Segments

其实可以改一下题目,变为:

对于每一条线段,求出其变成 beautiful segment 的时间,如果不会变,则输出 -1,顺便强制在线一波。这样代码难度递增。

我首先想到的是一个在线做法。

只要在这个区间内修改了严格大于一半的点,那么一个区间就变得 美丽

那么什么最早是什么时候?

定义序列 \(t_i\) 表示第 \(i\) 个点变成 \(1\) 的时间,如果没有修改则 \(t_i = \inf\)。

对于区间 \([l, r]\),设 \(k = \lfloor \frac {l - r + 1} 2 \rfloor + 1\),则对于序列 \(t\) 的区间 \([l, r]\) 第 \(k\) 小即为所求。

如果为 \(\inf\) 则不会变得 美丽

但是显然这太过于复杂。

考虑离线处理每一个线段,并且二分答案。

明显答案具有单调性,如果在 \(t\) 时变得 美丽,则之后一直会很 美丽

我说的不是我们

我们只加入前 \(mid\) 个点,然后用一个前缀和一一判断有没有 美丽 的线段即可。

如果是 美丽 的,则满足在这个区间内有 \(\ge k\) 个点变成了 \(1\)。

https://codeforces.com/contest/1843/submission/211083551

F.Omsk Metro

自己做的时候胡的性质:

对于一个路径 \(p\),定义其最大子段和为 \(mx_p\),最小子段和为 \(mn_p\)。

那么可以拼凑出来的区间为 \([mx_p, mn_p]\)。

感性证明一下:

这里不妨把一条路径拍扁成一条链,设为 \([l, r]\)。

我们考虑加入一个点 \(r\) 对于一条路径 \([l, r]\) 的影响。

设 \(suf_x\) 为以 \(x\) 为右端点,可以凑出来的权值的集合。

考虑递推,有 \(suf_x = \{0, w(x)\} \cup (suf_{x - 1} + w(x))\)。

于是对于区间 \([l, r]\) 有 \(S = \bigcup_{l \le x \le r} suf_x\)。

其实不难发现,\(suf_x\) 的上下界每一次最多只会变化 \(1\),也就是说,如果可以凑出 \(x (x \ge 0)\),那么一定可以凑出 \([0, x]\)。负数的情况同理。

所以我们考虑求出最大的,和最小的子段和即可 \(O(1)\) 判断……

实现上也就是树链剖分加上基本的求区间最大子段和的思路即可。

标签:suf,881,submission,1843,codeforces,CF,https,Div,com
From: https://www.cnblogs.com/jeefy/p/17504699.html

相关文章

  • CF1393E2 Twilight and Ancient Scroll
    显然有一个\(|S|\log|S|\)的dp做法,但是瓶颈在给字符串排序。也就是真正的瓶颈在于求lcp。AFewSuns给出了一种不需要科技的做法,orz。第一个排序的部分,令\(t_{i,j}\)代表第\(i\)个字符串去掉第\(j\)个字符后的字符串,要给所有\(t_{i,j}\)排序。注意到相同颜色段是可......
  • Educational Codeforces Round 150 (Rated for Div. 2) A-E
    比赛链接A代码#include<bits/stdc++.h>usingnamespacestd;usingll=longlong;boolsolve(){intn;cin>>n;if(n<=4)cout<<"Bob"<<'\n';elsecout<<"Alice"<<......
  • CF321C Ciel the Commander 题解 点分治
    题目链接:http://codeforces.com/problemset/problem/321/C解题思路:点分治模板题。每次找到重心给他分配一个字符,分治往下走的时候分配的字符ASCII码\(+1\)即可。示例程序:#include<bits/stdc++.h>usingnamespacestd;constintmaxn=1e5+5;vector<int>g[maxn];i......
  • CF765F. Souvenirs
    压位trie好厉害。显然加一个数很好维护,删一个数有点不好做,考虑回滚莫队。用平衡树维护数的集合,每次插入之前用前驱/后继与插入数的差更新一下答案,可以\(O(n\sqrt{n}\logn)\),会Timelimitexceededontest7or8。看上去我们已经优化到极限了,怎么办呢?显然莫队的\(n\sqrt{......
  • CF1553F. Pairwise Modulo
    终于过了,感觉还是有点东西的。首先我们有一个很好想的\(O(n(\lnA+\sqrt{A})\logn)\)的做法。首先这个式子能写成\(p_i=\sum\limits_{j=1}^i\sum\limits_{k=1}^i\left(a_j-a_k\left\lfloor\dfrac{a_j}{a_k}\right\rfloor\right)\)的形式。前面求和那部分是简单的,我们主要去......
  • Codeforces Round 875 (Div. 2) C. Copil Copac Draws Trees
    bfs解法如果是暴力求解的话就每次都扫描一次所有边直到所有点都和树连接优化:每次扫描我们可以发现会重复扫描那些已经存在树中的边了,因此我们可以只扫描还没有存在树中的边且是没扫过的边对于每次更新,比如由点a已经在树中,更新点b,我们只需判断点a被更新到树中点的编号和a-b边的......
  • stm32 基于HAL工程硬件I2C读取PCF8563
    参考链接:https://download.csdn.net/download/xqw19891201/11267260  #include"stm32xxxx.h"#include"stm32xxxx_hal.h"#definePCF8563_ADDRESS0xA2//PCF8563的I2C地址I2C_HandleTypeDefhi2c;//I2C句柄//从PCF8563读取一个字节uint8_tPCF8563_ReadByte(......
  • CF1400E Clear the Multiset
    CF1400ECleartheMultiset一道经典简单的分治由贪心可知,对于一段区间[L,R],一共有两种处理方式1.一个一个减,次数为l-r+12.先区间减,直到最小的减没了,在考虑最小值隔开的两个区间。如果有多个最小值,其实也不影响,再往下分的时候一定会分开。区间答案就是$min(l-r+1,f(l,p-1)+f(......
  • CF1815E Bosco and Particle
    有个粒子初始在\(0\)位置,\(1\cdotsn\)位置分别为有一个对撞器,如果在\(0\)位置则向右,如果在\(n+1\)位置则向左。每个对撞器有一个\(01\)串,初始所有对撞器的指针都在开头,当粒子走到\(i\)位置时,对撞器所指的值为\(0\)则不改变方向,否则反向,指针指向下一个位置,如果在串......
  • Codeforces Round #879 (Div. 2) A-E
    比赛链接A代码#include<bits/stdc++.h>usingnamespacestd;usingll=longlong;boolsolve(){intn;cin>>n;intcnt=0;for(inti=1;i<=n;i++){intx;cin>>x;if(x==-1)cnt++;......