【树状数组 + 简单题】杭电 hdu 1166 敌兵布阵

本文介绍了一个基于树状数组实现的敌兵布阵问题解决方案。通过具体实例演示了树状数组的使用方法,包括添加元素、求区间和等操作,并提供了完整的C++代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


/* 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 ; }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值