【MX-S3】梦熊周赛 · 提高组 3 & FeOI Round 1

野心#

题意:

给定长度为 n<2×106 的排列 a

求有多少个 i<n 满足 [1,i][i+1,n] 排序后都是等差数列。

我们发现不存在合法的 i[3,n2] 使得 [1,i] 的公差 d3

假设 [1,i] 构成 1,1+d,1+2d 的等差序列。

后缀元素在前缀元素之间的差值为 1,跨过前缀元素的差值为 2,一定不合法。

需要考虑的合法情况只有:

  • [1,i] 中元素恰为值域上的一个前缀或后缀。
  • 公差为 2

如果 i=2i=n1,构成 [1,n][2,n1] 也是合法的。

submission

Journey#

题意:
range(a,b,c) 表示序列

[a,a+c,a+2c,,a+kc]

其中 k 是满足 a+kc<b 的最大非负整数。

给定大小为 n2×107 的数组 g,求

a=1nb=a+1n+1c=1nirange(a,b,c)gi

数据范围暗示很明显了,只放过线性做法。

每个 gi 会被 a+kc=ib>i 的三元组贡献到。

f(i) 表示 a+kc=i(a,c) 对数

f(i)=a=1nc=1n[a+kc=i]=n+a=1i1d(ia)=n+a=1i1d(i)

因此只要把 d(i) 筛出来然后做一遍前缀和即可。

最后再乘上 bni+1 种取值。

submission

再演#

初始集合只要记录操作然后从当前集合回退即可。

定义上数为一对数中较大的,同理定义下数

返回的 p 是所有上数中最小的。

p1 交换,1 与原来 p 的下数 q 组成 (1,q)

由于 p 已经是上数中最小的了,qp 还小,因此一定有 res=q,我们称该操作将 q 暴露出来。

q2n 交换,得到 (1,2n)

无论如何 2n 不会作为返回值,因此可以把 (1,2n) 删掉,递归到一个值域为 [2,2n1] 的子问题。

边界情况是只有一个数对 (n,n+1),不用询问,直接返回。

这样总询问数等于 2n2,比 2n3 的限制多了一次。

考虑值域为 [n1,n+2] 的情况,res 一定是 nn+1 之一,我们的目的是将 (n,n+1) 凑对,因此无需 2 次操作,只需一次交换。

具体分讨见代码。submission

醒餞の鳥 (feat. Feryquitous)#

枚举性质 k,如果 i,j 满足 ai,k>ai,k,那么 k 分配的系数 X 必须保证 i,j 最坏也只能排名相同(不能 ji 前面)。

贪心的把 1X 分配给与 k 不同且 aj,lai,l 最大的性质 l,则

Xaj,lai,laj,lai,l+ai,kaj,k

  1. O(nm2)

    将所有人按照性质 k 排序,ai,k 相同的 i 划分到类 {ai,k}

    如果 {s1},{s2},{s3} 是按序排好的三类人。

    使 {s3}>{s2} 的系数为 X3,使 {s2}>{s1} 的系数为 X2

    由于不等号的传递性,我们不再需要考虑 {s1},{s3},需要考虑的偏序对数降到 O(n)

    考虑相邻的两类人 j,i,现在要最大化 X

    X11+ai,kaj,kmaxaj,lminai,l

  2. O(n2m)

    考虑枚举 i,j,kl 为等于 k 且满足 aj,lai,l 最大。

    预处理每对 i,j 最大和次大 aj,lai,l 对应的编号。(k 为最大值时用最大值转移)

    这样预处理和转移都是 O(n2m) 的。

最后根据数据分治一下,m<n 用算法1,否则用算法2,可以做到 O(nmnm)

submission

posted @   Lu_xZ  阅读(59)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
more_horiz
keyboard_arrow_up dark_mode palette
选择主题
menu
点击右上角即可分享
微信分享提示