zoukankan      html  css  js  c++  java
  • 数据结构复习之分块

    分块大暴力!!!分块大暴力!!!

    分块是一个具有很强普适性的数据结构。可以适用于许多区间操作,只是效率略低了一点。。。

    分块大体的套路如下:预处理出整块的贡献,暴力搞边界两个非完整块的贡献。

    分块由鬼畜证明每个块的大小为sqrt(n)的话复杂度比较好。

    一下为分块板子

    解释一下几个数组的意思

    block是每个块的大小,l[i]为该块的左端点,r[i]为该块的右端点,pos[i]为i属于的块

    void pre()
    {
      for(int i=1;i<=cnt;i++) l[i]=(i-1)*block,r[i]=i*block;
      r[cnt]=n;
      for(int i=1;i<=n;i++) pos[i]=(i-1)/block+1;
    }
    int main()
    {
    。。。。。 block
    =(int)sqrt(n); if(!(n%block)) cnt=n/block; else cnt=n/block+1; pre();
    。。。。。 }

    训练题目:

    HNOI2016 最小公倍数

    HNOI2010 弹飞绵羊

    bzoj 数颜色2

  • 相关阅读:
    堆排序算法
    基数排序
    快速排序
    OpenSSL加密证书
    jobs后台任务
    at,crontab例行性任务
    dns
    ftp
    ssh
    iptables
  • 原文地址:https://www.cnblogs.com/qt666/p/6481448.html
Copyright © 2011-2022 走看看