线段树(单点更新)/树状数组 HDOJ 1166 敌兵布阵
/*
线段树基本功能:区间值的和,修改某个值
*/
#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 敌兵布阵的更多相关文章
- 【线段树I:母题】hdu 1166 敌兵布阵
[线段树I:母题]hdu 1166 敌兵布阵 题目链接:hdu 1166 敌兵布阵 题目大意 C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又開始忙乎了.A国在海 ...
- HDOJ 1166.敌兵布阵
2015-06-08 问题简述: 原题的题意相当于有一些连续摆放的箱子,里面装着球,球的数量可以加减,现要查询几个连续的箱子里球的总数,其中存在放球和拿球的操作. 原题链接:http://acm.hd ...
- hdoj 1166 敌兵布阵 线段数和树状数组
敌兵布阵 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...
- hdoj 1166 敌兵布阵【线段树求区间最大值+单点更新】
敌兵布阵 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...
- hdoj 1166 敌兵布阵(树状数组)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1166 思路分析:该问题为动态连续和查询问题,使用数组数组可以解决:也可使用线段树解决该问题: 代码如下 ...
- HDOJ 1166 敌兵布阵 (线段树)
题目: Problem Description C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国在海岸线沿直线布置了N个工兵营地,Derek和Ti ...
- HDU.1166 敌兵布阵 (线段树 单点更新 区间查询)
HDU.1166 敌兵布阵 (线段树 单点更新 区间查询) 题意分析 加深理解,重写一遍 代码总览 #include <bits/stdc++.h> #define nmax 100000 ...
- hdu 1166 敌兵布阵 线段树 点更新
// hdu 1166 敌兵布阵 线段树 点更新 // // 这道题裸的线段树的点更新,直接写就能够了 // // 一直以来想要进线段树的坑,结果一直没有跳进去,今天算是跳进去吧, // 尽管十分简单 ...
- HDU 1166 敌兵布阵 (树状数组)
题目链接 : http://acm.hdu.edu.cn/showproblem.php?pid=1166 敌兵布阵 Time Limit: 2000/1000 MS (Java/Others) ...
随机推荐
- 对FreeMarker技术的思考
依照静态非静态来划分网页分为两种:静态网页和非静态网页,究其优缺点而言,静态网页在用户訪问的时候响应快,可是因为里面的数据是写死的.所以致命的缺陷就是数据不能动态显示.非静态页面(如jsp)数据能够动 ...
- SpringMVC -- 第一个简单的程序
学习springMVC,我们来记录下第一个HelloWord的程序 首先.我们组织须要的jar包 commons-logging-1.1.3.jar spring-aop-4.1.7.RELEASE. ...
- python day - 19 抽象类 接口类 多态 封装
一. 抽象类接口类即制定一个规范 特点: 1.不可被实例化. 2.规范子类当中必须事先某个方法. 3.在python中有原生实现抽象类的方法,但没有原生实现接口类的方法. 例题:制定一个规范就是,子类 ...
- webdriver.close() quit() 批量kill进程 内存耗尽的解决办法
问题现象: shell窗口卡,换IP的登录窗,不开: 猜测: 内存耗尽 spider_url,py driver = webdriver.PhantomJS( executable_path='/us ...
- 解析SQL中的包含的列和表
using System; using System.IO; using System.Collections.Generic; namespace SQLProcess { class Progra ...
- java 获取项目根目录
代码入下: request.getSession().getServletContext().getRealPath(); 这里的getRealPath()括号里面可以输入你想得到的具体目录. 需要注 ...
- ES6的相关新属性
ES6 引入了类这个概念. 1.class……extends es6中的class与es5 中的function差不多: class Student extends People , student ...
- SPOJ:NO GCD (求集合&秒啊)
You are given N(1<=N<=100000) integers. Each integer is square free(meaning it has no divisor ...
- iOS中键盘的收起
在UIViewController中收起键盘,除了调用相应控件的resignFirstResponder方法之外,还有另外三种方法: 重载UIViewController中的touchesBegin方 ...
- YUIDoc的使用方法小结
一.YUIDoc概述以及安装YUIDoc是为YUI Library用来生成HTML版API文档的一系列工具集,文档的生成完全基于JavaDoc风格的代码注释规则.该工具是基于Python语言编写,并且 ...