10.12noip模拟赛

T1:有n组信息,每组包含一个身高以及一个记录值b,表示此人前或后有b个人高于他,保证身高互不相同。考虑排序后贪心,因为前面的对后面的没有任何影响,所以正确性易证。每次考虑前后的空位置,两次二分,结果取min,由于二分无法保证答案可用,要维护第i个位置开始第一个空位置,用并查集实现。时间复杂度O(nlog2n),用线段树分治可用达到nlogn。(为什么noip模拟赛t1都这么神)
T2:求出l-r内质数以及可用由两个质数相乘得到的数的个数,询问次数1e5,范围1e7。筛出1e7以内的质数,枚举质数以及小于等于它本身且乘积不超过值域的质数,前缀和。由于唯一分解定理,该算法正确且复杂度为O(n)(用nloglogn的埃氏筛也是一样的,埃氏筛的记录数组可以用bitset且数组单一,大大优化访问速度,乘法次数也少于欧拉筛。只要不用求欧拉函数,有o2的情况下埃氏筛优于欧拉筛)
T3:求一个字符串中长度为m的不同的子串数量。emm,这题就是后缀数组的height中 < L的个数 + 1,就是后缀自动机上代表的长度区间包含L的结点个数,就是后缀树深度为L的结点的数量。说的好,我选择字符串hash。第一,不要用自然溢出,可以通过构造保证自然溢出只能通过2048以下的数据。第二,单hash至少1e12起步,模数1e12,串长1e5的正确概率只有99.6%(酋长,咱们回去吧)。那么这题只有双hash加set判断就行了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值