Loading

jiaxun ynoi

一天一道慢慢写着。因为菜所以只有 easy round 和较简单题。

TEST_68

简化一下限制。注意到很多点都能取到最大值,具体的,若最大值为 \(x,y\) 处取到,那么只有 \(1\rightsquigarrow x,1\rightsquigarrow y\) 路径上的点取不到。而一条链是非常好做的,直接 dfs 下来就行。时间复杂度 \(\mathcal O(n\log w)\)

  • 这种简化限制的思路非常好用。另一个经典的例题是树上路径 mex 的 \(\mathcal O(n)-\mathcal O(1)\) 求法。好像是叉姐给 hdu 2014 多校出的题来着。

TEST_152

区间 assign 肯定是想 ODT 啊啊啊,为啥有人想不到啊啊。

考虑对操作扫描线,用一个树状数组维护后缀和即可 \(\mathcal O(m\log m+n\log n)\)。这么简单。这么不会。

  • 区间 assign 考虑颜色段均摊。
  • 树状数组维护操作贡献后缀和。

虚空处刑 TEST_105

首先想到 loj noi round 的那个 lxl(?) 题,考虑这个颜色块只有合并没有分裂所以直接启发式合并维护就是对的。

但是我怎么知道它要和谁合并啊?想不到啊啊。看题解。

哦哦哦 map 启发式合并,原来是启发式合并这个啊。

用一个并查集维护联通块的最浅点,代表这个联通块,map 里存 list 维护这个东西就行了。

  • 注意问题研究的对象。

TEST_100

考虑分块。小块暴力,整块要维护整个值域经过一系列变换后会变成什么样。

考虑 \([l,r]\) 经过 \(a_p\) 以后是什么样子:

  • \(a_p<l\)\([l,r]\to [l-a_p,r-a_p]\)
  • \(a_p>r\)\([l,r]\to [a_p-r,a_p-l]\)
  • \(a_p\in [l, r]\):会分成两段 \([0,a_p-l]\)\([0,r-a_p]\),我们选较大的一段继续递归,那个较小的一段就可以推出来。

可以使用第二分块里面的并查集或者直接递归下去。时间复杂度 \(\mathcal O(n\sqrt w)\)

  • 利用函数的性质。

[Ynoi2016] 掉进兔子洞

容易想到莫队 + bitset 维护,但是 bitset 只能维护这个数出现没出现过啊,这怎么维护并集里每个数的出现次数。

离散化以后,如果 \(p\) 出现了 \(cnt_p\) 次,加入其的时候就加到 bitset 的第 \(p-cnt_p\) 位,\(cnt_p\gets cnt_p+1\)。这样显然正确。因为卡空间所以可以多跑几组莫队。时间复杂度 \(\mathcal O(\frac{n^2\sqrt m}{\omega})\)

  • 离散化特殊处理出现次数的维护方法。
posted @ 2023-10-06 12:09  Skylakes  阅读(26)  评论(0编辑  收藏  举报