题意:求区间和
连接点击打开链接
#include <stdio.h>
#include <string.h>
__int64 tree[50005];
int MaxVal;
void update ( int idx, __int64 val )
{
while ( idx <= MaxVal )
{
tree[idx] += val;
idx += ( idx & - idx );
}
}
__int64 read ( int idx )
{
__int64 sum = 0;
while ( idx > 0 )
{
sum += tree[idx];
idx -= ( idx & - idx );
}
return sum;
}
void solve ( int n )
{
memset ( tree, 0, sizeof tree );
MaxVal = n + 1;
for ( int i = 1; i <= n; i++ )
{
__int64 x;
scanf ( "%I64d", &x );
update ( i, x );
}
char str[200];
while ( ~scanf ( "%s", str ) )
{
if ( !strcmp ( "End", str ) )
return ;
int a, b;
scanf ( "%d%d", &a, &b );
if ( !strcmp ( "Add", str ) )
update ( a, b );
if ( !strcmp ( "Sub", str ) )
update ( a, -b );
if ( !strcmp ( "Query", str ) )
printf ( "%I64d\n", read ( b ) - read ( a - 1 ) );
}
}
int main ( )
{
int t, i = 1;
for ( scanf ( "%d", &t ); i <= t; i++ )
{
printf ( "Case %d:\n", i );
int n;
scanf ( "%d", &n );
solve ( n );
}
return 0;
}