zoukankan      html  css  js  c++  java
  • May Cook-Off 2021 Division 1

    May Cook-Off 2021 Division 1

    Double Burgers

    Permutation Swaps

    ((i,p_i)) 连边,维护每个环即可(略)

    Falling Zero

    简单地用栈维护一个从根到叶子的dp即可(略)

    Product Mex Queries

    先进行一些分析。假设区间中只有质数的次幂,质数 (p) 能拼出次幂的指数的 (mex)(W_p),那么答案为 (min{p^{W_P}})。既然答案是质数的次幂,那么加入不是质数次幂的数,显然于事无补,由此得到结论:有用的数只有质数的次幂。

    答案的宽松上界为第 (n+1) 个质数,那么我们维护每一种质数能拼出哪些指数,由于答案有上界,指数的上界为 (log V)

    方案Ⅰ:直接使用回滚莫队,用 (bitset) 维护可行性,用 (\_Find\_first()) 函数快速计算 (mex) 值,若用 (set) 维护答案多出 (log),可改用分块平衡去掉,复杂度 (O(frac{nsqrt{n}log V}{w}+nsqrt{V}))(sqrt{V}) 似乎有些大了,但其实可能的答案只有 (le V) 的质数次幂,数量略多于 (n),把这些可能值离散后再分块复杂度为 (O(frac{nsqrt{n}log V}{w}+nsqrt{n}))

    方案Ⅱ:将 (R) 从左往右移动,记录 (f_R(x)) 表示右端点在 (R),至少要区间 ([f_R(x),R]) 才能拼出 (x)。考虑加入 (R+1),若 (A_{R+1}) 不是质数的幂次就别管,否则假设 (A_{R+1}=p^k),我们只要更新 (p^c)(f_{R+1}(p^k·p^c)=min(f_R(p^k·p^c),f_R(p^c))),别忘了更新 (f_{R+1}(p^k)=R+1)。然后用线段树维护 (f_R) 的区间最值,在线段树上二分即可得到答案。复杂度 (O(nlog^2V/nlog nlog V))

    XOR maximum-minimum matrices

    (2^n) 枚举用了那些行,我们只需要每列的最小值和最大值,问题转化到序列上了。对于最小值和最大值分别维护一个单调栈,每次加入/删除的时候 (O(1)) 计算答案的变化量。假设选了 (cnt) 行,那么序列上的一种方案世纪对应 ((n-cnt+1)·cnt!·(n-cnt)!) 种,乘上去就好了。要先离散化预处理。复杂度 (O(nmlog (nm)+2^nm))

  • 相关阅读:
    ORACLE学习-1.过滤和排序
    Java-net.sf.json.JSONException: java.lang.reflect.InvocationTargetException处理方法之一
    ORACLE
    java日常-com.alibaba.fastjson快速处理json字符串转成list类型
    java日常-List、Map初始值
    javaScript中获取时间
    获取select的option值及其文本
    java日常-通过年月,获取到月的第一天和最后一天
    sybase powerdesigner 16.5注册码
    05-Docker私有仓库
  • 原文地址:https://www.cnblogs.com/whx666/p/15102782.html
Copyright © 2011-2022 走看看