1. 程式人生 > >學習筆記--分塊基礎

學習筆記--分塊基礎

兩種 如果 學習筆記 合並 strong 介紹 gpo .... i++

講師: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++ )
        ......

學習筆記--分塊基礎