Http://acm.hdu.edu.cn/showproblem.php? PID = 1, 1166
For details about the tree array, Baidu has a lot of related information.
# Include <iostream>
Using namespace STD;
Const int maxn = 50010;
// Long data [maxn];
Long result [maxn];
Long N;
Int lowbit (int t)
{
// Return T & (t ^ (t-1 ));
Return (-T) & T;
}
Int sum (INT end)
{
Long sum = 0;
While (end> 0)
{
Sum + = Result [end];
End-= lowbit (end );
}
Return sum;
}
Void plus (INT POs, int num)
{
While (Pos <= N)
{
Result [POS] + = num;
Pos + = lowbit (POS );
}
}
Int main ()
{
// Freopen ("out.txt", "W", stdout );
Int casenum, I, case1, A, B;
Long num;
Char STR [100];
Cin> casenum;
Case1 = 1;
While (casenum --)
{
// Memset (data, 0, sizeof (data ));
Memset (result, 0, sizeof (result ));
Cin> N;
For (I = 1; I <= N; I ++) // tree array Initialization
{
Cin> num;
Plus (I, num );
}
Printf ("case % d:/N", case1 );
While (CIN> STR, strcmp (STR, "end ")! = 0)
{
Cin> A> B;
If (strcmp (STR, "query") = 0)
Printf ("% LD/N", sum (B)-sum (A-1 ));
Else if (strcmp (STR, "add") = 0)
Plus (A, B );
Else if (strcmp (STR, "sub") = 0)
Plus (A, 0-b );
}
Case1 ++;
}
Return 0;
}