题目传送门

 /*
线段树基本功能:区间值的和,修改某个值
*/
#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. [网页游戏开发]进一步了解Morn UI及工作流

    Morn UI工作流 Morn Builder不仅仅是对Flash IDE的改进,传统的开发协作是以fla为基础,由于fla是二进制文件,在以svn等版本控制软件协作下,合并过程中会出现各种各样的问题 ...

  2. C++中的getopt的用法

    getopt的用法 getopt被用来解析命令行选项参数.就不用自己写东东处理argv了. 点击(此处)折叠或打开 #include <unistd.h> extern char *opt ...

  3. 服务器返回JSON,IE出现下载问题

    我向来的观点,IE就是个奇葩. 服务器返回json,chrome处理得好地地,但IE却奇葩地向你请求是否要保存这个JSON文件? 之所以出现这种弱智现象,是因为IE无法识别一个所谓的响应头部:appl ...

  4. 关闭SVN服务

    关闭TSVNCache.exe进程 在Windows下使用SVN,通常都会安装TortoiseSVN,安装后会有一个TSVNCache.exe的进程驻留内存,这个进程会定时地去扫描Subversion ...

  5. 倒排索引 获取指定单词的文档集合 使用hash去重单词term 提高数据压缩率的方法

    倒排索引源于实际应用中需要根据属性的值来查找记录.这种索引表中的每一项都包括一个属性值和具有该属性值的各记录的地址.由于不是由记录来确定属性值,而是由属性值来确定记录的位置,因而称为倒排索引(inve ...

  6. Android 的assets文件资源与raw文件资源读取

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/zpf8861/article/details/34504183   res/raw和assets的同 ...

  7. curl请求接口返回false,错误码60

    我讲一下我遇到的这个问题,是因为最近服务器加了https导致的,网上找到了答案,加上这句 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 就可以正常返 ...

  8. 自制简单的range(Vue)

    废话不多说先上成果图 实现思路 主要分界面与逻辑两大块 界面分为5个部分 左滑块长度 左内容位置 中间长度 右滑块长度 右内容位置 逻辑 touch3个事件 各滑块长度及位置计算 选中时变色 具体实现 ...

  9. 命令行 sql 将结果导出到文件

    1. into outfile filename; Mysql查询结果导出为Excel的几种方法 mysql> use world; # 使用 mysql 自带的 world 数据库 mysql ...

  10. HDU6028:Forgiveness(TLE ing,占位)

    Problem Description Little Q is now checking whether string A matches B. Two strings are considered ...