資料結構篇(1) ts實現棧的基本操作和解決相關問題
阿新 • • 發佈:2022-03-28
一維字首和:
for ( int i = 1 ; i <= n ; i++ ) sum [ i ] = sum [ i - 1 ] + a [ i ] ;
一維區間查詢:
∑( a [ l ] --> a [ r ] ) = sum [ r ] - sum [ l - 1 ] ;
二維字首和:
for ( int i = 1 ; i <= n ; i++ ) for ( int j = 1 ; j <= m ; j++ ) s [ i ][ j ]= s [ i - 1][ j ] + s [ i ][ j - 1 ] + a [ i ][ j ] - s[ i - 1 ][ j - 1 ] ;
二維區間查詢:
以x1,y1為左上角,x2,y2為右下角的區間
s [ x2 ][ y2 ] - s [ x1 - 1 ][ y2 ] - s [ x2 ][ y1 - 1 ] + s [ x1 - 1 ][ y1 - 1 ] ;
一維差分:
for ( int i = 1 ; i <= n ; i++ ) c [ i ] = a [ i ] - a [ i - 1 ] ;
一維區間操作:
區間(l,r)同增 x : c [ l ] += x ; c [ r + 1 ] −= x ;
二維差分:
for ( int i = 1 ; i <= n ; i++ ) for ( int j = 1 ; j <= m ; j++ ) c [ i ][ j ] = a [ i ][ j ] − a [ i−1 ][ j ] − a[ i ][ j−1 ] + a [ i−1 ][ j−1 ] ;
相當於二維區間查詢時單位 s [ i ][ j ] 的值。
二維區間操作:
c [ x1 ][ y1 ] += x ; c [ x2 + 1 ][ y1 ] −= x ; c [ x1 ][ y2 + 1 ] −= x ; c [ x2 + 1 ][ y2 + 1 ] −= x ;