题目传送门

 /*
线段树基本功能:区间值的和,修改某个值
*/
#include <cstdio>
#include <cstring>
#define lson l, m, rt << 1
#define rson m+1, r, rt << 1|1 const int MAX_N = + ;
int sum[MAX_N<<]; void pushup(int rt) //杭电大牛:notOnlySuccess 版本
{
sum[rt] = sum[rt<<] + sum[rt<<|];
} void build(int l, int r, int rt)
{
if (l == r)
{
scanf ("%d", &sum[rt]);
return ;
}
int m = (l + r) >> ;
build (lson);
build (rson);
pushup (rt);
} void update(int p, int add, int l, int r, int rt)
{
if (l == r)
{
sum[rt] += add;
return ;
}
int m = (l + r) >> ;
if (p <= m) update (p, add, lson);
else update (p, add, rson);
pushup (rt);
} int query(int ql, int qr, int l, int r, int rt)
{
if (ql <= l && r <= qr)
{
return sum[rt];
}
int m = (l + r) >> ;
int ans = ;
if (ql <= m) ans += query (ql, qr, lson);
if (qr > m) ans += query (ql, qr, rson); return ans;
} int main(void) //HDOJ 1166 敌兵布阵
{
//freopen ("inA.txt", "r", stdin);
int t, n, cas, ans;
int b, c;
char s[]; while (~scanf ("%d", &t))
{
cas = ;
while (t--)
{
scanf ("%d", &n);
build (, n, );
printf ("Case %d:\n", ++cas);
while (~scanf ("%s", &s))
{
if (strcmp (s, "End") == ) break;
scanf ("%d%d", &b, &c);
if (strcmp (s, "Query") == )
{
ans = query (b, c, , n, );
printf ("%d\n", ans);
}
else if (strcmp (s, "Add") == )
{
update (b, c, , n, );
}
else if (strcmp (s, "Sub") == )
{
update (b, -c, , n, );
}
}
}
} return ;
}

 /*
树状数组
*/
#include <cstdio>
#include <cstring> const int MAX_N = + ;
int a[MAX_N];
int n, num; int lowbit(int t) //求 2^k
{
//return t & (t ^ (t - 1));
return t & (-t);
} void plus(int num, int x) //第i个增加num个人
{
while (x <= n)
{
a[x] += num;
x += lowbit (x);
}
} int sum(int x) //求前x项的和
{
int sum = ;
while (x > )
{
sum += a[x];
x -= lowbit(x);
}
return sum;
} int main(void)
{
//freopen ("inA.txt", "r", stdin); int t;
char op[]; scanf ("%d", &t);
int k = t; while (k--)
{
memset (a, , sizeof (a));
scanf ("%d", &n);
for (int i=; i<=n; ++i)
{
scanf ("%d", &num);
plus (num, i);
}
int r = ;
while (scanf ("%s", &op), op[] != 'E')
{
int a, b;
scanf ("%d%d", &a, &b);
switch (op[])
{
case 'A':
plus (b, a);
break;
case 'S':
plus (-b, a);
break;
case 'Q':
if (r)
printf ("Case %d:\n", t - k);
r = ;
printf ("%d\n", sum (b) - sum (a-));
break;
}
}
} return ;
}

树状数组

线段树(单点更新)/树状数组 HDOJ 1166 敌兵布阵的更多相关文章

  1. 【线段树I:母题】hdu 1166 敌兵布阵

    [线段树I:母题]hdu 1166 敌兵布阵 题目链接:hdu 1166 敌兵布阵 题目大意 C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又開始忙乎了.A国在海 ...

  2. HDOJ 1166.敌兵布阵

    2015-06-08 问题简述: 原题的题意相当于有一些连续摆放的箱子,里面装着球,球的数量可以加减,现要查询几个连续的箱子里球的总数,其中存在放球和拿球的操作. 原题链接:http://acm.hd ...

  3. hdoj 1166 敌兵布阵 线段数和树状数组

    敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...

  4. hdoj 1166 敌兵布阵【线段树求区间最大值+单点更新】

    敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...

  5. hdoj 1166 敌兵布阵(树状数组)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1166 思路分析:该问题为动态连续和查询问题,使用数组数组可以解决:也可使用线段树解决该问题: 代码如下 ...

  6. HDOJ 1166 敌兵布阵 (线段树)

    题目: Problem Description C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国在海岸线沿直线布置了N个工兵营地,Derek和Ti ...

  7. HDU.1166 敌兵布阵 (线段树 单点更新 区间查询)

    HDU.1166 敌兵布阵 (线段树 单点更新 区间查询) 题意分析 加深理解,重写一遍 代码总览 #include <bits/stdc++.h> #define nmax 100000 ...

  8. hdu 1166 敌兵布阵 线段树 点更新

    // hdu 1166 敌兵布阵 线段树 点更新 // // 这道题裸的线段树的点更新,直接写就能够了 // // 一直以来想要进线段树的坑,结果一直没有跳进去,今天算是跳进去吧, // 尽管十分简单 ...

  9. HDU 1166 敌兵布阵 (树状数组)

    题目链接 : http://acm.hdu.edu.cn/showproblem.php?pid=1166 敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)    ...

随机推荐

  1. ++*p,(*p)++,*p++与*++p四者的区别

    四者的区别(*和++优先级相同默认从右向左运算) ++*p相当于++(*p),表示先给p指向的变量值加1,然后取该变量的值. (*p)++相当于先取p指向的变量,然后该变量值加1. *p++相当于*( ...

  2. 1449: [JSOI2009]球队收益

    1449: [JSOI2009]球队收益 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 757  Solved: 437[Submit][Status][ ...

  3. 【bzoj4240】有趣的家庭菜园

    只要统计每一个左右分别有多少比他高的去min,然后求和 #include<algorithm> #include<iostream> #include<cstdlib&g ...

  4. 使用a标签下载文件,而不是直接打开,使用属性 download

    有的时候,下载的链接文件如果是普通文件类型,如txt,我们下载文件的时候,有的浏览器不会弹出下载框,.而是直接打开了该文件. 针对这种情况,我们只需要在a标签上加上download属性即可显示下载框. ...

  5. mysql 查询表死锁 和结束死锁的表步骤以及锁表等级

    1.查询是否锁表show OPEN TABLES where In_use > 0; 2.查询进程 show processlist  查询到相对应的进程===然后 kill    id 补充: ...

  6. 计算机学院大学生程序设计竞赛(2015’12)Study Words

    Study Words Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Tota ...

  7. poj 1258 Agri-Net 解题报告

    题目链接:http://poj.org/problem?id=1258 题目意思:给出 n 个 farm,每个farm 之间通过一定数量的fiber 相连,问使得所有farm 直接或间接连通的 最少 ...

  8. 移动前端开发之viewport的理解

    在移动设备上进行网页的重构或开发,首先得搞明白的就是移动设备上的viewport了,只有明白了viewport的概念以及弄清楚了跟viewport有关的meta标签的使用,才能更好地让我们的网页适配或 ...

  9. [Selenium] Selenium WebDriver 的下载和安装

    为配合较为广泛使用Java 语言的程序员,仅以WebDriver 的Java语言绑定进行讲解. 步骤1:下载并安装Java开发环境 1)在系统中安装JDK(Java开发工具吧,Java Develop ...

  10. DP专辑之线性DP

    POJ1390 题目链接:http://poj.org/problem?id=1390 分类:记忆化搜索 dp[i][j][k] 表示,从i到j块且j后面有k块与第j块的颜色一样.dp[l][r][k ...