码迷,mamicode.com
首页 > 其他好文 > 详细

学习笔记--分块基础

时间:2018-02-24 19:23:26      阅读:135      评论:0      收藏:0      [点我收藏+]

标签:笔记   --   div   块大小   信息   合并   讲师   静态   reg   

讲师: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++ )
        ......

学习笔记--分块基础

标签:笔记   --   div   块大小   信息   合并   讲师   静态   reg   

原文地址:https://www.cnblogs.com/Rye-Catcher/p/8467016.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!