7月比赛难题选解

7.10 T3:

题意:维护序列,支持5种操作:

1.在光标后插入x,光标移到x后。

2.光标左移一位,光标在头则不变。

3.光标右移一位,光标在末尾则不变。

4.删除光标前的字符,光标位置不变。

5.查询以1~x结尾的最大前缀和,其中x在光标前。

分析:

看到这维护序列,第一反应,woc写平衡树啊,于是写了一发,但是常数太大T了两个点90分。

又想发现可以链表来维护,考完后lyd写了一发A了,%%%

正解是单调栈(这里单调栈的意思是如果待插元素比栈顶大,则插入,否则什么都不做),并维护另一个栈,代表光标右边的元素(注意不用单调)。

插入时相当于从栈顶插入一个元素;

左移如果不是栈顶,不做事,否则把栈顶放到另一个栈中;

右移就把另一个栈的栈顶中元素入栈;

删除如果不是栈顶,不做事,否则弹栈;

查询时在单调栈里二分x这个位置,小于等于x的最后一个元素就是前缀和最大值的末尾,只需修改时维护前缀和就行了。

(写了代码了,不过丢了,不想再写一遍了..)

7.18 T3:

题意:给定两段长度相同的序列,每次可以将第一段序列中的某个区间内的数+1后模4,问最少通过几次操作可以使第一个序列变成第二个序列。

分析:

将第一个数列与第二个数列每个位置上的元素对应相减,相当于问这个序列最少进行几次操作可以变为全0.

区间加不好搞,我们差分一下,区间加相当于头+1,尾的下一个元素-1,有多少个+1就是答案,我们用贪心随便搞搞就行了。

贪心思想大概就是,优先使用-1,如果-1不够就把前面的-1替换成+1,替换时,因为替换1,2,3都会多出来4个-1,我们优先替换3,因为这样我们只会多一个+1.

7.19 T3:

传送门:传送门

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值