zoukankan      html  css  js  c++  java
  • 学习笔记--分块基础

    讲师:noip _Orz

    • 相关介绍

      分块分静态和动态两种,动态分块才可以支持修改,下面我们都是讲动态分块。

      整块--操作完全覆盖的块

      零散块--操作不完全覆盖的块。

      分块保证每次操作最多经O(sqrt(n))个整块及O(1)个零散块

      • 分块作用:

        如果在分治结构上很难合并某些信息,就可以利用分块做。

    • 基础模板

      block -> 块大小

      belong[i] -> i属于的块编号

      l[i] -> 第i块的左端点

      r[i] -> 第i块的右端点

      for( register int i = 1 ; i <= n ; i++ )
         belong[i] = ( i - 1 ) / block;
      for( register int i = 1 ; i <= n ; i++ )
        if( !l[ belong[i] ] )
            l[ belong[i] ] = i;
      for( register int i = n ; i ; i-- )
        if( !r[ belong[i] ] )
            r[ belong[i] ] = i;
      modify/find( int L , int R )
      if( belong[l] == belong[r] )
        for( register int i = L ; i <= R ; i++ )
            .......
      else
      {
        for( register int i = L ; i <= r[ belong[L] ] ; i++ )
            ......
        for( register int i = l[ belong[R] ] ; i <= R ; i++ )
            ......
        for( register int i = belong[L] + 1 ; i <=      belong[R] - 1 ; i++ )
            ......
    
  • 相关阅读:
    订单生成案例详解
    分页案例详解
    简单的多条件查询案例
    删除选中案例详解
    转账汇款案例
    登录操作记住用户名实现
    根据自定义异常来回显错误信息
    会话技术cookie和session详解
    JDBC
    Netty入门教程——认识Netty
  • 原文地址:https://www.cnblogs.com/Rye-Catcher/p/8467016.html
Copyright © 2011-2022 走看看