【线段树基础】NKOJ 1321 数列操作
|
问题描述
假设有一列数{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 数列操作的更多相关文章
- P1198 [JSOI2008]最大数(线段树基础)
P1198 [JSOI2008]最大数 题目描述 现在请求你维护一个数列,要求提供以下两种操作: 1. 查询操作. 语法:Q L 功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值. 限制: ...
- Poj 3246 Balanced Lineup(线段树基础)
依旧是线段树基础题 询问区间的最大值和最小值之差,只有询问,没有插入删除.继续理解基础线段树 #include <iostream> #include <algorithm> ...
- [JSOI2008]最大数(线段树基础)
题目描述 现在请求你维护一个数列,要求提供以下两种操作: 1. 查询操作. 语法:Q L 功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值. 限制: L 不超过当前数列的长度.(L > ...
- 线段树基础模板&&扫描线
线段树的单点更新+区间求和 hdu1166敌兵布阵 Input 第一行一个整数T,表示有T组数据. 每组数据第一行一个正整数N(N<=),表示敌人有N个工兵营地 ,接下来有N个正整数,第i个正整 ...
- POJ 2777 线段树基础题
题意: 给你一个长度为N的线段数,一开始每个树的颜色都是1,然后有2个操作. 第一个操作,将区间[a , b ]的颜色换成c. 第二个操作,输出区间[a , b ]不同颜色的总数. 直接线段树搞之.不 ...
- HDU 1754 I Hate It(线段树基础应用)
基础线段树 #include<iostream> #include<cstdio> #include<cstring> using namespace std; # ...
- HDU 6155 Subsequence Count(矩阵乘法+线段树+基础DP)
题意 给定一个长度为 \(n\) 的 \(01\) 串,完成 \(m\) 种操作--操作分两种翻转 \([l,r]\) 区间中的元素.求区间 \([l,r]\) 有多少个不同的子序列. \(1 \le ...
- hdu 1754 I Hate It 线段树基础题
Problem Description 很多学校流行一种比较的习惯.老师们很喜欢询问,从某某到某某当中,分数最高的是多少. 这让很多学生很反感. 不管你喜不喜欢,现在需要你做的是,就是按照老师的要求, ...
- hdu 1698 Just a Hook(线段树基础)
成段更新的线段树,加入了延时标记............ 线段树这种东西细节上的理解因人而异,还是要自己深入理解......慢慢来 #include <iostream> #include ...
随机推荐
- .NET异步程序设计之async&await
目录 0.背景引入 1.async和await基本语法 2.异步方法的执行顺序 3.取消一个异步操作 4.同步和异步等待任务 5.异步操作中的异常处理 6.多线程和异步的区分 7. 在 .NET MV ...
- Levenshtein Distance(编辑距离)算法与使用场景
前提 已经很久没深入研究过算法相关的东西,毕竟日常少用,就算死记硬背也是没有实施场景导致容易淡忘.最近在做一个脱敏数据和明文数据匹配的需求的时候,用到了一个算法叫Levenshtein Distanc ...
- 利用iTunes给MP3添加专辑插图
利用iTunes给MP3添加专辑插图 打开iTunes 准备好没有专辑插图的mp3文件和插图 将准备好的mp3文件拖入iTunes 右键菜单选择专辑信息选项 在专辑信息里面选择插图 点击左下角的添加插 ...
- 【读后感】《Java编程思想》~ 异常
[读后感]<Java编程思想>~异常 终于拿出压箱底的那本<Java编程思想>.这本书我年轻的时候就买了,但是翻过几页后就放弃了.没想到这两天翻了一下,真的有收获. 看了一下第 ...
- Vue父子组件通讯
我们知道,父组件不能修改子组件的数据[这种说法是不严谨的],严谨的说法是:子组件内部不能修改从父组件传递过来的值.原因是vue遵循的是数据单向流原则,父组件传递数据给子组件只能单向绑定,通过Props ...
- JavaScript(js)函数声明与函数表达式的区别
在JavaScript中,函数是经常用到的,在实际开发的时候,我想很多人都没有太在意函数的声明与函数表达式的区别,但是呢,这种细节的东西对于学好js是非常重要的. 函数声明与函数表达式用代码写出来是这 ...
- Linux apache开启虚拟主机伪静态.htaccess
打开apache配置文件 /etc/httpd/conf/httpd.conf 查找“#LoadModule rewrite_module modules/mod_rewrite.so” 去掉前面的# ...
- PHP变量存储结构
首先声明,我并没有去读PHP的源码,只是对于PHP的有时候诡异的表现感兴趣,找了一下开发人员laruence的博客结合PHP提供的函数debug_zval_dump刺探得到了本博客所阐述的工作机理.如 ...
- 【11】openlayers 地图交互
地图交互interaction 关于map的方法: //添加地图交互 map.addInteraction(interaction) //删除地图交互 map.removeInteraction(in ...
- 题解 NOI1999【生日蛋糕】—— 洛谷
自己想出这题的大佬蒟蒻在这儿%您了 我实在是太弱了,搜索这种辣鸡算法都不会(逃 这题真的是想了好久,每次都会T三个点,我以为我的剪枝已经堆了够多了,结果后来才知道是一个关键剪枝没想到OTZ 先贴代码 ...