首页 > 其他分享 >杂题乱做3

杂题乱做3

时间:2023-03-09 09:23:32浏览次数:50  
标签:二分 mx2 显然 即可 答案 区间 杂题

补了一些讲过的远古题和近期的 CF 2000分以上的部分题。

CF1764H

题意:有序列 \(a_n\),初始 \(a_i=i\),给定 \(m\) 个修改操作 \([l_i,r_i]\),修改方式是把区间内所有数赋值成左端点的值。求修改操作在循环下,对于每一个 \(x\),依次进行操作 \([x,x+k-1]\) 之后序列不同数的个数。\(n,m\le 2\times 10^5\)。

首先对于没有覆盖的位置,扫描线时计算答案是简单的。对于覆盖的位置,只有每个询问的左端点可能产生贡献。

产生贡献的充要条件如下:

  1. 设上一个覆盖左端点 \(l_i\) 的操作是 \(f_i\),则显然当 \(x > f_i\) 时有贡献。

  2. 设 \(g_i\) 表示区间全被覆盖掉的最早时刻,\(v_x\) 表示 \(x\) 位置从当前开始最早什么时候会被覆盖,则有 \(g_i=\max_{k=l_i}^{r_i}(v_k)\),更新第 \(i\) 个修改区间的覆盖也比较简单。只需要将左端点的 \(v_{l_i}\) 赋成 \(g_i\),区间剩余部分赋成 \(i\) 即可。

CF1764G

有长度为 \(n\) 的排列,可以查询 \(query(l,r,k)\),交互库会告诉你 \(\lfloor \frac{a_i}{k} \rfloor,i\subset[l,r]\) 的不同值数量,在 30/21/20 次询问内确定 \(1\) 的位置,\(n\le 1000\)。

考虑将 \(2x+1,2x\) 看成一个 pair,考虑统计 \(f(l,r)\) 表示满足如下条件的 pair 个数:区间内部外部个包含一个值。

这个统计是 easy 的,因为你可以用 \(query(l,r,2)\) 算出来,满足条件的 pair 个数就是 \(2\times query(l,r,2)-(r-l+1)\)。

对于 \(n\) 是奇数的情况,判断 \(1\) 是否在某个区间内,只需查询区间内,外的满足条件 pair 个数,如果内部大于外部就是这个区间,否则就是二分的另一个区间包含 1。

对于 \(n\) 是偶数,发现 \(n\) 也特殊(无配对),所以只需确定 n 的位置即可。

通过 \(query(l,r,n),l<r\) 是否大于 1,可以判断出区间是否存在 \(n\)。

于是一种 naive 的做法是二分出 \(n\),但是发现这样不如玩原神。

其实可以正常二分过程中,发现左右区间的 pair 数都和外面相等了,就判一下 \(n\) 在哪个区间内即可。

这样就只需 21 次查询。

考虑再杀掉一次查询。

发现二分到区间长度等于二后,还需两次查询才能赢。

试图压缩成一次。

显然如果此时 \(n\) 还没有区分出来,那询问一次 \(n\) 在哪边即可。

其他情况,因为已知 \([1,l-1],[1,r],[l,n],[r+1,n]\) 的答案,通过分类讨论可以压缩一次查询。

设两个数中一个是 1,另一个是 \(x\)。

具体地,考虑设 \(g(l,r)\) 表示区间内 pair 的个数,那么显然我们二分过程中知道了 \(g(1,l-1),g(1,r),g(l,n),g(r+1,n)\) 的答案。

那么当 \(g(1,l-1)=g(1,r)\) 的时候,显然与 \(x\) 配对的另一个数在 \([1,l-1]\) 中。否则在 \([r+1,n]\) 中。

那么对于在左区间的的情况,查询一次 \([1,l]\),判断 \(g(1,l)\) 是否恰好等于 \(g(1,l-1)-1\),是则 \(r\) 是 1,否则 l 是 1。

在右区间的情况是类似的。

CF453E

显然颜色段均摊。首先用个 Set 维护颜色段。然后除掉 ODT,接下来的问题就是询问一段区间从 0 开始经过一段时间后的 sum。发现题目的 \(m\) 值域是 \(10^5\),所以分块之后对于每个块预处理下每个前缀和即可。

对于初值,可以在颜色是 0 的那些段暴力扫,是 \(O(n)\) 的。

CF1789D

傻逼构造。能不能s一s啊。简单题,但是位运算和垃圾的输出方式容易把人整晕。

设前面的位是高位。那么首先判掉一些显然的特殊情况,例如 \(a=b\) 无需操作,\(b=0\),\(a=0\) 显然无解。

剩余情况必然有解。考虑构造解。此时 \(a,b\) 都包含至少一个 \(1\)。

可以用 bitset 模拟操作。注意 bitset 操作时要随时把被 remove 掉的位干掉,避免影响答案。同时 bitset 的左移右移只能为非负。

首先设 \(mx1\) 是 \(a\) 的最高位,\(mx2\) 是 \(b\) 的最高位,那么如果 \(mx2\le mx1\),显然是容易构造出解的。只需先通过对 \(mx1\) 的左移异或(若 \(mx1=mx2\) 不用管)将 \(a\) 的 \(mx2\) 位变成1,然后从前往后按位考虑,当前的位和 \(b\) 不相同就将最高位 \(mx2\) 拉过来异或一下,否则不管。

那么就解决了 \(mx2\le mx1\) 的情况。

剩余情况 \(mx1 < mx2\),考虑转化成刚刚的情况。

此时如果 \(a\) 中只有一个 1,需要新开一个 1 方便操作,这个 1 要开在 \(mx2\) 的位置,这样 \(mx2\) 这位就省下了操作,保证总操作数不会大于 \(n\)。

然后取最低一位的 1,从 \(mx2-1\) 向最前面枚举,发现当前位是 \(1\) 就把最低位的 1 拉过来异或。

这样就消掉了高位的 1,转化到了上面的情况。

不难发现操作数严格不超过 \(n\)。

CF1789E

简单小数学题。

首先考虑 \(s_n\) 的因数 \(x\),这部分显然只有 \(x|s_i\) 的 \(i\) 贡献答案,枚举一下就好了。

然后考虑其他数。做过整除分块的都知道 \(\lfloor \frac{s_n}{x} \rfloor = y\) 的 \(y\) 一共只有 \(O(\sqrt{s_n})\) 种取值。

于是做一个整除分块。然后对于一个 \(y\),答案显然是满足 \(ay+b=s_i,b\le a\) 的 \(i\) 的个数。这部分可以预处理出值域上前缀和然后计算 \([py,py+p],p < y\) 的答案。而大于 \(y^2\) 的显然全部满足限制。

然后整除分块中可能把因数也算进去,枚举一下每个除数 \(x\) 看是否是因数,是就减掉他的答案即可。

复杂度不太会算,但是远比 \(O(\sum s_n \ln s_n)\) 小,应该是接近 \(O(\sum s_n)\) 的。

CF1789F

牛逼乱搞题。

类似于根号分治,我们考虑出现次数小于 5 的,显然这时只有出现两次和三次的是有用的(四次的被两次的覆盖了)。

那么枚举序列断点,求 LCS 即可。复杂度 \(O(n^5+n^3)\),而且常数极其极其小。

对于出现次数大于等于 5 的,发现如果把序列劈成五部分,则最优串一定是某部分的子序列。

这时每段长度是不超过 16 的,枚举子序列暴力全串匹配即可做到 \(O(5\times 2^{\frac{n}{5}}\times n)\)。

CF1796E

首先,如果根是确定的,做法显然,只需要二分答案 \(x\) 就容易判断合法性。具体地,设 \(f_i\) 表示 \(i\) 子树内最短链的长度,则转移是 \(f_i=\min(f_v)\),其中 \(v\) 是 \(i\) 的儿子。

若有不小于两个 \(v\) 满足 \(f_v < x\),则直接不合法。

那么根不确定呢?当 1 不合法的时候,就是存在一个不合法的节点 \(u\),满足 \(u\) 至少有两个儿子 \(v1,v2\),使得 \(f_{v1},f_{v2} < x\),那么显然你必须以 \(v1,v2\) 最短那条链的叶子节点中的任意节点为新根,若都不合法就彻底摆烂。为什么是对的?因为你用其他子树的或者子树外的,则这两棵子树内的答案必然不变,仍然是寄的。

而如果根节点的 \(f\) 小于 \(x\),此时只需以其 \(f\) 值小于 \(x\) 的那个点对应的叶子节点检查一遍即可。

复杂度 \(O(n \log n)\)。

CF1795F

二分答案+树上贪心。

首先这种不好直接求的东西,而且满足二分性的,肯定要二分答案。先二分 1-k 这些人总共能走几步,再二分剩下一轮中 \(1-i\) 的人走一步。

考虑贪心。dfs 的过程中,我们先递归完子树,处理完子树内部的人的走步,然后考虑自己。那么显然,如果子树内走完之后剩下的树,能够向下走的步数不小于要求步数,那么直接向下走显然是优的,因为他不会影响到剩余人的走步(因为他自己就占了位,子树外的点不可能走到子树里来),而如果向下走不够,我们只能尝试向父亲走,于是过程中如果父亲被占了或者到根步数还不够,就不合法。

实现的话每个点可以打一个 tag,表示是否有人覆盖这个位置,如果是的话已经走了几步,这样就可以直接做两种二分了。

CF1795G

必然有解,于是考虑把每个点的度数减掉 \(a_i\) 之后做拓扑排序,并按拓扑序把边重定向,那么点对是好的当且仅当其不能在新的有向图上互达。于是问题就在于求可以相互到达的点对数量。

直接开 bitset 按拓扑序逆序更新可达点集合即可。但是空间开不下,于是考虑一次更新整张图所有点和 \([L,R]\) 中点的可达性,\(R-L+1\) 取一个适中的数即可。

也可以不用 bitset,改用 ull 压位,这时 \(R-L+1=64\),但 bitset 就是 ull 压位,二者实际上是一个东西。

复杂度 \(O(\frac{n^2}{64})\)。

标签:二分,mx2,显然,即可,答案,区间,杂题
From: https://www.cnblogs.com/infinities/p/17197075.html

相关文章

  • 3月CF杂题
    CodeforcesRound853(Div.2)打的VP。E.ServalandMusicGame妙妙题。F.ServalandBrainPower妙妙题+1。对\(k\ge5\)的情况,我们把整个序列分成5段,那......
  • 3月AT杂题
    ABC292Ex太一眼了,不写了。F-RegularTriangleInsideaRectangle题意:给你一个大小为a*b的矩形,求矩形内部能放下的最大正三角形的边长。\(a,b\le10^3\)。假设a......
  • 杂题小记(2023.02.22)
    杂题小记(2023.02.22)目录杂题小记(2023.02.22)更好的阅读体验戳此进入HDU-3038HowManyAnswersAreWrong题面SolutionCodeLG-P1525[NOIP2010提高组]关押罪犯题面Soluti......
  • 杂题小记(2023.02.24)
    杂题小记(2023.02.24)目录杂题小记(2023.02.24)更好的阅读体验戳此进入LG-P5251[LnOI2019]第二代图灵机题面SolutionCodeLG-P3765总统选举题面SolutionCodeUPD更好的阅读体......
  • 杂题小记(2023.02.27)
    杂题小记(2023.02.27)目录杂题小记(2023.02.27)更好的阅读体验戳此进入LG-P3865【模板】ST表LG-P3293[SCOI2016]美味题面SolutionCodeLG-P5490【模板】扫描线题面Solution......
  • 杂题小记(2023.03.01)
    杂题小记(2023.03.01)目录杂题小记(2023.03.01)更好的阅读体验戳此进入[ARC084D]SmallMultiple题面SolutionCodeLG-P2371[国家集训队]墨墨的等式题面SolutionCodeLG-P2158......
  • 杂题小记(2023.02.28)
    杂题小记(2023.02.28)目录杂题小记(2023.02.28)更好的阅读体验戳此进入SP2713GSS4-CanyouanswerthesequeriesIV题面SolutionCodeLG-P4391[BOI2009]RadioTransmissio......
  • CF杂题题解
    129B.StudentsandShoelaces题意:一个\(n\)个点\(m\)条边的无向图,每一轮删去所有度数为\(1\)的点,问删几轮停止。暴力模拟每一轮即可,每次删点更新邻居度数。{%......
  • USACO23JAN P【杂题】
    A.[USACO23JAN]TractorPathsP有\(n\)个区间,第\(i\)个区间为\([l_i,r_i]\)。保证\(l_1<l_2<\cdots<l_n\)且\(r_1<r_2<\cdots<r_n\)。其中一部分区间是特殊的。......
  • 多项式杂题
    多项式特训。开始大生产运动。不得不说黑题通过数一下就上来了。由于大多数比较工业所以一律不放代码。歌被咕了,打算报复性整点活。整活其实不一定需要整活用的曲。目前......