树状数组板子题:
#include <bits/stdc++.h>
const int N= 5e4 + 10 ;
const int mod= 1e7 + 9 ;
const int maxn= 0x3f3f3f3f ;
const int minn= 0xc0c0c0c0 ;
const int inf= 99999999 ;
using namespace std;
int a[ N] , b[ N] , n;
int lowbit ( int x)
{
return x& ( - x) ;
}
int add ( int i, int k)
{
while ( i<= n)
{
b[ i] + = k;
i+ = lowbit ( i) ;
}
}
int sum ( int x)
{
int res= 0 ;
while ( x> 0 )
{
res+ = b[ x] ;
x- = lowbit ( x) ;
}
return res;
}
int main ( )
{
ios:: sync_with_stdio ( false ) ;
cin. tie ( 0 ) ; cout. tie ( 0 ) ;
int t, j;
cin>> t;
for ( j= 1 ; j<= t; j++ )
{
memset ( b, 0 , sizeof ( b) ) ;
cout<< "Case " << j<< ":" << endl;
int i;
cin>> n;
for ( i= 1 ; i<= n; i++ )
{
cin>> a[ i] ;
add ( i, a[ i] ) ;
}
string s;
while ( cin>> s)
{
if ( s== "End" )
break ;
else
{
int x, y;
cin>> x>> y;
if ( s== "Add" )
add ( x, y) ;
if ( s== "Sub" )
add ( x, - y) ;
if ( s== "Query" )
{
int res= sum ( y) - sum ( x- 1 ) ;
cout<< res<< endl;
}
}
}
}
return 0 ;
}