我是靠谱客的博主 飞快百合,最近开发中收集的这篇文章主要介绍hdoj 1166 敌兵布阵(树状数组),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1166

思路分析:该问题为动态连续和查询问题,使用数组数组可以解决;也可使用线段树解决该问题;

 

代码如下:

#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
const int MAX_N = 50000 + 10;
int c[MAX_N];
inline int Lowbit(int x) { return x & -x; }
inline int Sum(int x)
{
int ret = 0;
while (x) {
ret += c[x];
x -= Lowbit(x);
}
return ret;
}
inline void Add(int x, int d, int n)
{
while (x <= n) {
c[x] += d;
x += Lowbit(x);
}
}
int main()
{
int a = 0, b = 0, ans = 0, temp = 0;
int test_case = 0, case_id = 0, n = 0;
char command[10];
scanf("%d", &test_case);
while (test_case--) {
scanf("%d", &n);
memset(c, 0, sizeof(c));
for (int i = 1; i <= n; ++ i) {
scanf("%d", &temp);
Add(i, temp, n);
}
printf("Case %d:n", ++case_id);
while(scanf("%s", command) != EOF && command[0] != 'E') {
scanf("%d %d", &a, &b);
if (command[0] == 'Q') {
ans = Sum(b) - Sum(a - 1);
printf("%dn", ans);
} else if (command[0] == 'A') {
Add(a, b, n);
} else {
Add(a, -b, n);
}
}
}
return 0;
}

转载于:https://www.cnblogs.com/tallisHe/p/4657499.html

最后

以上就是飞快百合为你收集整理的hdoj 1166 敌兵布阵(树状数组)的全部内容,希望文章能够帮你解决hdoj 1166 敌兵布阵(树状数组)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(41)

评论列表共有 0 条评论

立即
投稿
返回
顶部