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

杂题乱做

时间:2024-02-29 13:58:54浏览次数:20  
标签:le sqrt lt 哈希 区间 杂题 dp

记录一些有意思的题。

其他模拟赛link

CF1858E2

\(*2600\).

维护一个当前指针endpos,指向序列末尾,同时维护一个 set<pair<int,int> >,表示每个数第一次出现的位置。

加操作可以直接加入,如果当前这个数已经出现过直接右移指针,否则维护一棵树状数组,加上贡献。

减操作直接将 endpos 左移即可。

回滚操作时,因为可以记录上一次操作,然后就可以直接减操作变成加,加操作变成减。

询问直接在BIT上查就行。

注意细节。

CF981G

*2500.

感觉很显然啊。

考虑对于每个可重集,添加怎么维护 size。对于一个可重集,如果这个数存在,那么 size 乘二,否则 size 加一。

因为是对一段添加并且值域为 \(n\),所以容易想到用 ODT 来维护数 \(x\) 是否存在。如果某一段的值为 0,就对这一段区间加。否则,就区间乘 2。线段树实现即可。

容易犯错的是没有保证 ODT 的复杂度正确,即在 ODT 上跳完之后没有将遍历的区间推平。

代码很好写。

CF1548B

*1800.

双指针。差分之后维护一个 gcd ST表,然后判 \(\gcd _{i=l}^r\not= 1\) 即可。

据说叫什么不删除双指针?

CF375D

*2400.

简单树上莫队。

CF1400F

*2800.

lzqy_讲状态数 dp 的例题,好像秒了。

发现这个 \(x\) 很小,想一下哪些状态和 X-substring 有关,直接把需要的状态存下来,而这是很对的。

CF1922F

*2500.

区间 dp.

看到 \(n,x \le 100\), \(\sum x\le 500\) 发现可以 \(O(n^3x)\)。

很奢侈地设 \(f_{i,j,k}\) 指令区间 \([i,j]\) 全部为 \(k\) 的代价。

发现这个不包含 \(k\) 覆盖的操作很难转移,考虑再设一个 \(g_{i,j,k}\) 表示令区间 \([i,j]\) 不含 \(k\) 的代价。

考虑怎么转移。

发现 \(g\) 的转移就是一个区间 dp 板子,发现 \(g_{i,j,k}\) 要对所有 \(({g_{i,j,o}+1})(1\le o \le x)\) 取 \(\min\)。

然后对着 \(f\) 区间 dp 一下,算上 \(g\) 的贡献即可。

需要注意什么时候需要对 \(\min(g_{i,j,k})\) 加一,不然可能会 WA on #2。

CF1746F

*2800.

首先知道是一个 \(\log\) 级别的。

考虑一个神秘哈希,如果一段区间合法,那么你对每个数值进行哈希,这段区间哈希值的和必定是 \(k\) 的倍数。注意到这只是充分条件,不能反推,所以多哈希几次就行。

常数太大不想调。

upd:调用太多次函数且不内联且早期丑陋马蜂导致的。重构完就过了。

upd2:过段时间又交一次又不过,发现原因是 umap 常数太大/fn,直接将原来的值改为指向离散化数组的位置就跑的飞快了。

P9461

感觉很神。

先有一个引理:b 中区间 \([l,r]\) 的最小众数必定为 \(b_l\) 或 \(1\)。用反证法证明。

然后对 \(lt=2,3,\dots,\max a\) 分别计算对应的最小众数为 \(b_{lt}\) 的 \(rt\) 数量。其余的为最小众数为 \(1\) 的区间。

问题转化为计算对应的最小众数为 \(b_{lt}\) 的 \(rt\) 数量。考虑一段 a 中区间满足能从 b 的 \(lt\) 走到 \(rt\) 当且仅当\(\forall x\in[lt,rt],a_x\ge b_{lt}\)。用链表维护答案。


嘴巴会的:

CF444D

根号分治。

字符串哈希之后转化题意为:

长度为 \(n\) 的序列,\(q\) 次询问求最短的包含数 \(x,y\) 的区间长度。

这很根号分治。设阈值为 \(B\)。

如果 \(x,y\) 出现次数均小于 \(B\),那么直接类似归并,在两个 vector 里面扫一遍即可。

否则出现次数 \(\ge B\) 的数 \(p\) 显然 \(\large\le \frac n B\)个。考虑一个暴力,从头到尾扫一遍,发现一个数\(q\) 和 \(p\) 的贡献要么是在 \(p\) 前且和 \(p\) 最近的 \(q\) ,要么是后面的且离 \(p\) 最近的 \(q\)。所以直接记录一下就可以了。所以和其他的匹配是 \(O(n\sqrt n)\)的。令 \(B=\sqrt n\),丢到一个 umap 里面就做到了纯正的 \(O(n\sqrt n)\)。

ps:lsy提出在存 \(q\) 的位置里面二分,然后调一下 \(B\) 就可以 \(O(n\sqrt {n\log n})\)。感觉好写一点啊。

代码有点难写,但是嘴巴会了就是会了!!!1

标签:le,sqrt,lt,哈希,区间,杂题,dp
From: https://www.cnblogs.com/lgh-blog/p/18043526

相关文章

  • 2024年2月 杂题记录
    [ARC122E]IncreasingLCMs正序构造的话,我们是不知道前面有什么的,于是我们倒序构造。当我们考虑最后一位时,前面的位都是知道的。设\(v=\operatorname{lcm}(x_1,\dots,x_{i-1})\),则有\(v<\operatorname{lcm}(v,x_i)\),即\(\gcd(v,x_i)<x_i\),这等价于\(\operatorname{lcm}_{j\ne......
  • 杂题笔记
    XSY5208odekeke先考虑\(c=0\)怎么做。直接DP非常困难,发现一个球放A还是B的决策与放圆洞还是方洞的决策互相独立,可以求出两种决策的方案数再乘起来。\(f_i\)表示A总重量为\(i\)的方案数,\(g_i\)表示方洞总重量为\(i\)的方案数,做01背包。合法的方案判一下各个......
  • 杂题记录2
    P3515[POI2011]LightningConductor此处主要记录不用决策单调性的做法。我们发现根号的取值是\(O(\sqrt{n})\)级别的。于是在每一个位置枚举根号取值然后在对应前后缀中查询\(a_j\)最值,这样算法是\(O(n\sqrt{n})\)的。使用贡献法,对于每一个位置\(i\)考虑对别的位置......
  • 「杂题乱刷」CF954C
    题目链接题目链接(CF)题目链接(luogu)题意简述有一个\(n\timesm\)的矩阵,矩阵上的数字\(1\simn\timesm\)自上到下,自左到右,对于每次操作,你可以向上,下,左或右移动一步,你需要构造出符合操作序列的\(n\)和\(m\)或报告无解。解题思路容易证明,合法的操作序列相邻两项......
  • 海亮02/19杂题
    海亮02/19杂题个人题单T5link题意设一个数组\(a_{1,2,\dots,l}\)是平衡的,当且仅当\(\existsk\in[1,\frac{l-1}{2}],\foralli\in[1,l-2\timesk],a_{i}+a_{i+2\timesk}=2\timesa_{i+k}\)。现在给你一个数组\(a\),你需要对\(\foralll\in[1,n]\)求出子序列......
  • 海亮02/18杂题
    海亮02/18杂题个人题单T1link题意给你一个长度为\(n\)的数列,然后给你\(q\)个交换或不交换操作,你可以选择操作或者不操作,问所有情况下逆序对的总和。答案需要对\(10^9+7\)取模。\(n\leq3000\),\(q\leq3000\)。题解发现一个问题,对于操作执不执行很难描述,怎么办?......
  • 「杂题乱刷」P3952
    链接写的比较爽的一道小模拟。交了\(5\)发之后才过,码力有待加强。题意不说了。第一版代码(73pts):此代码样例没过,仅是想看看当前代码的得分。点击查看代码/*Tips:你数组开小了吗?你MLE了吗?你觉得是贪心,是不是该想想dp?一个小时没调出来,是不是该考虑换题?*/#include<bit......
  • 海亮02/15杂题
    海亮02/15杂题个人题单T2link题意给定一个\(n\)个点,\(m\)条边的仙人掌,每条边至多存在于一个环。你可以进行如下操作:选择一个度数为奇数的点,把与其相连的边全部删去。创建一个新的图,新图有\(2n\)个点。假如原图的编号为\(1\simn\),则若原图中\(u,v\)有边,则新图中......
  • 【无评级杂题】DP/贪心
    题目这题后来看了看网上的思路,发现贪心就能做,亏我还写了个O(2*N)的DP...浪费时间了属于是my-code#include<iostream>#include<cstring>#include<string>#include<cstdio>#include<cstdlib>#include<algorithm>#include<stack>#include<queue>......
  • 「杂题乱刷」洛谷 P1831
    题目链接一道简单数位dp题。多设一个支点和力矩和然后套板子就做完了。参考代码:点击查看代码/*Tips:你数组开小了吗?你MLE了吗?你觉得是贪心,是不是该想想dp?一个小时没调出来,是不是该考虑换题?*/#include<bits/stdc++.h>usingnamespacestd;#definemapunordered_m......