zoukankan      html  css  js  c++  java
  • 【BestCoder #48】

    与之前一样,秒刷A和B,然后就永远卡在了C

    B也因为少看一句话被Hunt掉了

    说说C的做法吧(分块大法好

    给定一个序列,每次询问区间l-r,求∑(ai^bi),其中bi是指ai在区间中的出现次数,ai是指有在区间中出现的数。

    先把官方的正解贴出来:

    然后我用自己的话来说一下。。

    分块,首先预处理出h(i,j)和g(a,b),各自的复杂度一个为n^1.5,一个多加上快速幂的logn

    h的话你可以求出每个块所含有的数 O(块数*块内元素数=n),然后再前缀和累加起来 O(值域*块数=n^1.5)

    g的话直接利用正解说的方法暴力求一下 O(块数*块数*块内元素数*计算时间=n^1.5*logn)

    对于询问,我们可以将分块完剩余的两端暴力求出各个数的出现次数,然后与中间整块的答案合并 O(块内元素数*计算时间=n^0.5*logn)

    对于快速幂所带来的log,我们预处理出所有有可能要计算的幂就行了,用vector存的话空间也不是问题 O(n)

    总的复杂度就是O(n^1.5+Q*n^1.5)

  • 相关阅读:
    xadmin 安装
    Python
    使用免费证书安装 ipa 到真机
    Jupyter PPT
    Javascript注意点
    论文哪里找?
    神经网络术语
    PyTorch上路
    DCGAN实现
    数据库和数据挖掘领域的会议和期刊
  • 原文地址:https://www.cnblogs.com/NanoApe/p/4658921.html
Copyright © 2011-2022 走看看