/* THE PROGRAM IS MADE BY PYY */
/*----------------------------------------------------------------------------//
Copyright (c) 2011 panyanyany All rights reserved.
URL : http://acm.hdu.edu.cn/showproblem.php?pid=1166
Name : 1166 敌兵布阵
Date : Sunday, September 18, 2011
Time Stage : half an hour
Result:
4622505 2011-09-18 14:51:36 Accepted 1166
31MS 412K 1406 B
C++ pyy小号
Test Data :
Review :
第二次做,理解了树状数组的原理,其实是很简单的
//----------------------------------------------------------------------------*/
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#define MAXSIZE 50001
int tcase, n ;
int tree[MAXSIZE] ;
int lowbit (int x)
{
return (x) & (-x) ;
}
void add (int pos, int val)
{
while (pos <= n)
{
tree[pos] += val ;
pos += lowbit (pos) ;
}
}
int getSum (int x)
{
int sum = 0 ;
while (x > 0)
{
sum += tree[x] ;
x -= lowbit (x) ;
}
return sum ;
}
int main ()
{
char str[20] ;
int i, j ;
int x, y ;
while (scanf ("%d", &tcase) != EOF)
{
for (j = 1 ; j <= tcase ; ++j)
{
memset (tree, 0, sizeof (tree)) ;
scanf ("%d", &n) ;
for (i = 1 ; i <= n ; ++i)
{
scanf ("%d", &x) ;
add (i, x) ;
}
printf ("Case %d:\n", j) ;
while (scanf ("%s", str), *str != 'E')
{
scanf ("%d%d", &x, &y) ;
if (*str == 'Q')
printf ("%d\n", getSum (y) - getSum (x - 1)) ;
else if (*str == 'A')
add (x, y) ;
else if (*str == 'S')
add (x, -y) ;
}
}
}
return 0 ;
}
【树状数组 + 简单题】杭电 hdu 1166 敌兵布阵
最新推荐文章于 2022-05-11 21:47:27 发布