二维树状数组模板,不过注意要用读入优化。
#include <stdio.h>
#include <algorithm>
#include <string.h>
using namespace std;
#define lowbit( x ) (( x ) & ( -x ))
const int N = 1025 ;
int n,f[N][N],x1,y1,x2,y2,c,p;
void edit( int x , int y , int c ) {
for (int i = x ; i <= n ; i += lowbit(i) )
for (int j = y ; j <= n ; j += lowbit(j) )
f[i][j] += c ;
return ;
}
int sum( int x , int y ) {
int ans = 0 ;
for (int i = x ; i ; i -= lowbit( i ) )
for (int j = y ; j ; j -= lowbit( j ) )
ans += f[i][j] ;
return ans ;
}
int get() {
int p = 0 , t = 1 ; char x = getchar() ;
while ( x < '0' || x > '9' ) {
if ( x == '-' ) t = -1 ;
x = getchar() ;
}
while ( x >= '0' && x <= '9' )
p = p * 10 + x - '0' ,
x = getchar() ;
return p * t ;
}
int main() {
getchar() ; n = get() ;
p = get() ;
while ( p != 3 ) {
if ( p == 1 ) {
x1 = get() ; y1 = get() ; c = get() ;
x1 ++ ; y1 ++ ;
edit( x1 , y1 , c ) ;
}
else {
x1 = get() ; y1 = get() ; x2 = get() ; y2 = get() ;
x1 ++ ; y1 ++ ; x2 ++ ; y2 ++ ;
printf("%d\n" , sum( x2 , y2 ) + sum ( x1 - 1 , y1 - 1 ) - sum( x2 , y1 - 1 ) - sum( x1 - 1 , y2 ) );
}
p = get() ;
}
return 0;
}