时间限制 : 10000 MS   空间限制 : 165536 KB
问题描述

假设有一列数{Ai}(1≤i≤n),支持如下两种操作:
将Ak的值加D。(k, D是输入的数)
输出As+As+1+…+At。(s, t都是输入的数,S≤T)

输入格式

第一行一个整数n,
第二行为n个整数,表示{Ai}的初始值≤10000。
第三行为一个整数m,表示操作数
下接m行,每行描述一个操作,有如下两种情况:
ADD k d (表示将Ak加d,1<=k<=n,d为数,d的绝对值不超过10000)
SUM s t (表示输出As+…+At)

输出格式

对于每一个SUM提问,输出结果

样例输入 1

5 
1 2 3 2 4 
5 
SUM 1 2
SUM 1 5
ADD 1 2
SUM 1 2
SUM 1 5

样例输出 1

3 
12 
5 
14

样例输入 2

10
44 37 20 29 13 8 32 14 46 29 
8
ADD 5 3
SUM 1 8
SUM 4 6
ADD 3 18
SUM 2 5
ADD 4 15
SUM 1 7
SUM 5 10

样例输出 2

200
53
120
219
145

提示

M,N<=100000

【提示】
线段树板题
【参考代码】
 #include<cstdio>
#define maxn 100003
int n, m;
int A[maxn];
char op[];
struct node {
int a, b, v;
}Tree[maxn << ];
namespace Ironclad_Programming {
#define R register int
#define For(i, s, n) for (R i = s; i <= n; ++ i)
namespace ini {
void MakeTree(int p, int x, int y) {
Tree[p].a = x;
Tree[p].b = y;
if (x < y) {
MakeTree(p * , x, ((x + y) >> ));
MakeTree(p * + , ((x + y) >> ) + , y);
Tree[p].v = Tree[p * ].v + Tree[p * + ].v;
} else Tree[p].v = A[x];
}
void executive() {
scanf("%d", &n);
For (i, , n)scanf("%d", &A[i]);
MakeTree(, , n);
}
}
namespace solve {
void Add(int p, int k, int d) {
Tree[p].v += d;
if (Tree[p].a == Tree[p].b)return;
if (Tree[p * ].a <= k && Tree[p * ].b >= k)Add(p * , k, d);
if (Tree[p * + ].a <= k && Tree[p * + ].b >= k)Add(p * + , k, d);
}
int GetSum(int p, int s, int t) {
if (t < Tree[p].a || s > Tree[p].b)return ;
if (s <= Tree[p].a && Tree[p].b <= t)return Tree[p].v;
else {
int Total = ;
Total += GetSum(p * , s, t);
Total += GetSum(p * + , s, t);
return Total;
}
}
void executive() {
scanf("%d", &m);
For (i, , m) {
scanf("%s", op);
if (op[] == 'A') {
int k, d;
scanf("%d%d", &k, &d);
Add(, k, d);
} else {
int s, t;
scanf("%d%d", &s, &t);
printf("%d\n", GetSum(, s, t));
}
}
}
}
void Main() {
ini::executive();
solve::executive();
}
#undef R
#undef For
}
int main() {
Ironclad_Programming::Main();
return ;
}

【线段树基础】NKOJ 1321 数列操作的更多相关文章

  1. P1198 [JSOI2008]最大数(线段树基础)

    P1198 [JSOI2008]最大数 题目描述 现在请求你维护一个数列,要求提供以下两种操作: 1. 查询操作. 语法:Q L 功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值. 限制: ...

  2. Poj 3246 Balanced Lineup(线段树基础)

    依旧是线段树基础题 询问区间的最大值和最小值之差,只有询问,没有插入删除.继续理解基础线段树 #include <iostream> #include <algorithm> ...

  3. [JSOI2008]最大数(线段树基础)

    题目描述 现在请求你维护一个数列,要求提供以下两种操作: 1. 查询操作. 语法:Q L 功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值. 限制: L 不超过当前数列的长度.(L > ...

  4. 线段树基础模板&&扫描线

    线段树的单点更新+区间求和 hdu1166敌兵布阵 Input 第一行一个整数T,表示有T组数据. 每组数据第一行一个正整数N(N<=),表示敌人有N个工兵营地 ,接下来有N个正整数,第i个正整 ...

  5. POJ 2777 线段树基础题

    题意: 给你一个长度为N的线段数,一开始每个树的颜色都是1,然后有2个操作. 第一个操作,将区间[a , b ]的颜色换成c. 第二个操作,输出区间[a , b ]不同颜色的总数. 直接线段树搞之.不 ...

  6. HDU 1754 I Hate It(线段树基础应用)

    基础线段树 #include<iostream> #include<cstdio> #include<cstring> using namespace std; # ...

  7. HDU 6155 Subsequence Count(矩阵乘法+线段树+基础DP)

    题意 给定一个长度为 \(n\) 的 \(01\) 串,完成 \(m\) 种操作--操作分两种翻转 \([l,r]\) 区间中的元素.求区间 \([l,r]\) 有多少个不同的子序列. \(1 \le ...

  8. hdu 1754 I Hate It 线段树基础题

    Problem Description 很多学校流行一种比较的习惯.老师们很喜欢询问,从某某到某某当中,分数最高的是多少. 这让很多学生很反感. 不管你喜不喜欢,现在需要你做的是,就是按照老师的要求, ...

  9. hdu 1698 Just a Hook(线段树基础)

    成段更新的线段树,加入了延时标记............ 线段树这种东西细节上的理解因人而异,还是要自己深入理解......慢慢来 #include <iostream> #include ...

随机推荐

  1. blender 2.8 [学习笔记-04] 编辑模式-网格拆分

    在编辑模式下

  2. javascript闭包的用处

    谈及javascript的闭包,可能想到的就是内存泄露,慎用闭包,但是实际上闭包还有更多好的作用: 1,可以将for循环的变量封闭在闭包环境中,下面这种情况,无论点击1-5div,最终打印的都是5,因 ...

  3. go学习第五天、运算符

    算术运算符 下表列出了所有Go语言的算术运算符.假定 A 值为 10,B 值为 20 运算符 描述 实例 + 相加 A + B 输出结果 30 - 相减 A - B 输出结果 -10 * 相乘 A * ...

  4. Java反射之成员方法的反射

    上一篇介绍了Java反射之成员变量的反射,这次介绍成员方法的反射. [一]Method类 Method类中封装了所有java方法的属性,包括该方法是否私有,该方法的修饰符,返回值,参数,抛的错误等等. ...

  5. Python基础类型(1)

    整数 整数在Python中的关键字用int来表示; 整型在计算机中运于计算和比较 在32位机器上int的范围是:  -2**31-2**31-1,即-2147483648-2147483647 在64 ...

  6. go 创建slice的方式

    1.直接声明:var slice []int 2.new: slice := *new([]int) 3.字面量:slice := []int{1,2,3,4,5} 4.make: slice :=  ...

  7. Expression表达式目录树

    一.初识Expression 1.在上一篇我们讲到了委托(忘记了可以在看看,点赞在看养成习惯),今天要讲的Expression也和委托有一点点关系吧(没有直接关系,只是想要大家看看我其他的文章),Ex ...

  8. 谈谈MySQL数据库索引

    在分析MySQL数据库索引之前,很多小伙伴对数据结构中的树理解不够深刻.因此我们由浅入深一步步探讨树的演进过程,再一步步引出MySQL数据库索引底层数据结构. 一.二叉树 二叉查找树也称为有序二叉查找 ...

  9. Ansible Ad-Hoc与常用模块

    ansible 执行结果信息–各颜色说明:ansible Ad-Hoc 说明:ansible 如何查看帮助文档与常用模块详解 主机规划 添加用户账号 说明: 1. 运维人员使用的登录账号: 2. 所有 ...

  10. Python基础篇(四)_组合数据类型的基本概念

    Python基础篇——组合数据类型的基本概念 集合类型:元素的集合,元素之间无序 序列类型:是一个元素向量,元素之间存在先后关系,通过序号进行访问,没有排他性,具体包括字符串类型.元组类型.列表类型 ...