8.23模拟赛

30 篇文章 0 订阅
17 篇文章 0 订阅

T1 第一眼主席树!!!肯定会T。
     然而把数按照从小到大的顺序删除,用一个双向链表维护当前数组,
1)枚举即将删除的数x,往左跳k-1个数;
2)然后看当前区间往左右有多少个空格,乘一下即为这K个数为前K大且x为第K大的方案数,再将整个区间往右移;
3)重复流程2),直到x成为了区间最左端的点。
时间: O(NK)

T2 有个结论,将B数组排完序后,最优解之一满足 AN+kBk 下图给出简单证明:
这里写图片描述
1式等于3式原因是3式在N之后的红色部分一定小于前面,可以忽略不计。所以有 AN+1B1 ,同理可以往后面推。
因此一开始预处理出f[i]数组,表示a[i~N]中最大的a[i]-i,对B排序后,按照结论贪心,维护一个tmp,为最大的a[N+j]-(N+j),每次和f[j]取max后,更新tmp即可。
时间: O(NlogN+N

T3 对于每个数字k,算出它出现在X个不同矩阵里,对答案贡献即X。枚举行列i,j,对于第j列维护一个pos【j】【k】,表示在第j列最靠下的k值所在行。为了避免重复计算,在计算的矩阵中应该不出现之前的k,所以对于当前行i到第j列上一个k的位置pos【j】【k】,枚举一个矩阵的上界K,然后往左右延伸最远处L,R,然后矩阵的下界即为n行。
这里写图片描述
最后累加 (ni)(jl)(rj) 即可.
时间: ON4)

AC代码:
T1:http://paste.ubuntu.com/25423583/
T2:http://paste.ubuntu.com/25423584/
T3:http://paste.ubuntu.com/25423585/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值