zoukankan      html  css  js  c++  java
  • 2017.08.13涉猎题集

    1.君と彼女の恋

    找出有多少个序列满足,和为n(n<=1e18),每个元素mod m(m<=100)都不同。
    结果mod大质数。
    

    我们可以先求出每个元素mod m后,序列得到某个和的方案数。然后可以一直+m达到n。
    设f[i][j]表示序列中每个元素mod m后,得到的和为i,并且序列中有j个数,保证这j个数互不相同

    for k:=0 to m-1 do
        for i:=1 to m do
            for j:=i*m downto 1 do
                f[j][i]+=f[j-k][k-1]
    

    枚举i,j后,给序列中的任意元素加上若干个m,使得和为n。
    首先序列排序有j!,然后设还要加x=(n-i)/m个m,就要给这j个数分配x个m。
    那么就是一个隔板问题。
    所以i,j的贡献就是$$f[i][j]i!C_{x+i-1}^{i-1}$$
    然后C可以递推求。

    2.收税

    给出m个修改操作和询问操作,和n个办公室。每个办公室在一个修改操作后会有一条直线(起始位置(X,y),斜率)
    询问操作问[l,r]的直线与x=X交点的y坐标最大值。保证修改操作和询问操作中的X递增。
    n,m<=1e5
    

    容易发现我们可以做到O(1)修改,O(n)查询。
    考虑分块,平衡复杂度。
    给每个块维护一个单调队列,按斜率排序,表示一个下凸壳。
    修改操作就直接暴力重构单调队列。
    询问操作就暴力查询每个单调队列,和落单的元素。

    3.非整除序列

    一张由10^17个结点组成的树,2是根节点。
    编号i的父亲为j,其中满足i是1~j-1中任意一个数的倍数,但不是j的倍数。询问区间A~B,算出其中每个节点到根节点的距离和。
    

    j是i的父亲,当且仅当(g[j-1]|i,g[j]!|i),其中(g[i]=lcm(1..i))
    那么处理出g后,发现大于41的父亲都小于41,所以暴力出前41的ans,那么ans[i]=ans[fa[i]]+1,i>41。

    枚举父亲i,要求出有多少个数是g[i-1]的倍数,而不是g[i]的倍数,设为h[i]。
    由于g[i]是g[i-1]的倍数,所以不是g[i-1]的倍数,则一定不是g[i]的倍数。

    4.可修改区间第k大

    用树状数组套动态开点的线段树。
    然后每颗线段树就独立开来,用树状数组做差分。

  • 相关阅读:
    点击单元格(LinkToAction)获取Table行号和数据(Table篇一)
    金额和数量不显示0
    自定event事件之全局初始化中自动触发(二)
    自定event事件之手动触发(一)
    Python的requests如何同时post图片二进制流和json数据application/octet-stream
    树莓派点亮LED灯需要几行代码?3行。小孩子都能学会
    50元求解pyqt加载并显示pdf问题
    pyqt5加载pdf文档失败
    建个群,互相关心
    唉,十年前的沙雕照片
  • 原文地址:https://www.cnblogs.com/hiweibolu/p/7355380.html
Copyright © 2011-2022 走看看