d大佬找来毒瘤”数据结构“毒我呜呜呜

P3932 浮游大陆的68号岛

f i f_i fi 表示前 i i i 个物品移动到 i i i 位置的代价 g i g_i gi 表示 i i i 之后的物品移到 i i i 的代价

这个可以线性预处理 然后就随便搞一下 O ( 1 ) O(1) O(1) 求答案了

P3792 由乃大母神原型和偶像崇拜

这个主要科技就是 c h e c k check check 一个区间的数是否是连续一段的方法

把每个数映射到一个随机数上 然后把区间的数异或起来 看是否等于某连续一段的数对应随机数的异或和

怎么找是哪一段 就是 [ 区间最小值,区间最大值 ]

然后线段树直接搞就行了

P4117 [Ynoi2018] 五彩斑斓的世界

啊啊啊这道题真的好烦好烦好烦好烦

烦死了 我讨厌分块

对序列分块 然后由于块与块没有联系 (哲学上的讲联系具有普遍性,同时也是具体的,这里体现的就是具体性,giao我爱政治

那么就一个一个块来从头到尾处理 为什么呢 因为一起处理空间不够

此时已经有 n \sqrt{n} n 个块了 这就要求块内的处理时间大概是 O ( n ) O(n) O(n)

我们考虑一个科技 在 O ( x ) O(x) O(x) 的时间内把块内所有大于 x x x 的数减小 x x x

用值域个并查集 值相同就在一个并查集中 并维护并查集的大小 和代表的值 将所有值为 i i i 的数变为值为 i − x i-x ix 就直接合并查集就行了

若块内最大值是 m m m

  • m ≥ 2 x m \ge 2x m2x 将所有小于等于 x x x 的数加 x x x,整个块打标记减去 x x x (操作 x x x 次)
  • m < 2 x m < 2x m<2x 将所有大于 x x x 的数减去 x x x (操作 m − x ≤ x m-x\le x mxx 次)

这就是在 O ( x ) O(x) O(x) 的时间内把块内所有大于 x x x 的数减小 x x x 的科技了 唯一的缺点就是不能有加、

P5610 [Ynoi2013] 大学

这道题就是让你快速找到区间内某个数的倍数

giaogiaogiao真的很恶心的卡常

直接说科技了 时间太tm难卡了 不得不说毒瘤出题人lxl确实tql

开值域个vector 按顺序保存值是它倍数的下标

找区间的时候在vector上二分

然后删除操作就用一个并查集 记录vector里这个数是否被删除 删除了就指向下一个没被删除的点 就挺暴力挺离谱 但是它很正确

P5072 [Ynoi2015] 盼君勿忘

思路很简单 有个我没见过的操作是处理不同模数下2的幂次

考虑预处理出 2 1 , 2 2 , 2 3 2^1,2^2,2^3 21,22,23 2 n , 2 2 n , 2 3 n 2^{\sqrt{n}},2^{2\sqrt{n}},2^{3\sqrt{n}} 2n ,22n ,23n ,这样每个次幂都可以用两个部分直接 乘起来了.

posted @ 2022-10-10 20:19  缙云山车神  阅读(18)  评论(0编辑  收藏  举报