DTOJ 4676. 小w的数列

探讨了在一个环形数列中,通过MIN和MAX操作将数列变换至特定目标值的最少操作次数问题。提出了贪心策略,并结合异或差分思想,实现了高效的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题意

w有一个长度为 nnn 的环形数列,即 aia_iaiai+1a_{i+1}ai+1 相邻, ana_nana1a_1a1 相邻。因此,每个数字都有且仅有两个邻居。

w每分钟可以执行两种操作。

  • MIN操作,将 aia_iai 设置为它和它的两个邻居的值的最小值。
  • MAX操作,将 aia_iai 设置为它和它的两个邻居的值的最大值。

比如对于序列 3,5,23,5,23,5,2 ,对数字 555MAX操作可以得到数列 3,5,23,5,23,5,2 ,作MIN操作可以得到数列 3,2,23,2,23,2,2

w想知道对于 111mmm 的每个数字 xxx ,将环形数列 aaa 通过MIN操作和MAX操作变换到 xxx 的最少操作次数。

对于 10%10 \%10% 的数据, n≤5,m≤5n \le 5,m \le 5n5,m5
对于 50%50 \%50% 的数据, n≤1000,m≤1000n \le 1000,m \le 1000n1000,m1000
对于 100%100 \%100% 的数据, 3≤n≤200000,1≤m≤2000003 \le n \le 200000, 1 \le m \le 2000003n200000,1m200000

题解

容易想到贪心:对于一个数x,每两个x之间的数按照小于或大于它分为若干段,代价就是数的个数+段数。但如果有一段只有一个数,那么可先将它改小,这样可使答案-1。于是对于一些连续的只有一个数的段,它可使答案减少个数/2。
而直接用线段树维护是不好做的(考场+考后调到自闭)。此时应注意到每个数的状态只有0/1,而答案与每个数和前一个数的异或值有关。于是联想到异或差分:一段区间的答案即为这段区间的差分数组的连续1的段的长度/2之和。于是容易维护。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值