51nod 1081 子段求和(线段树 | 树状数组 | 前缀和)
题目链接:子段求和
题意:n个数字序列,m次询问,每次询问从第p个开始L长度序列的子段和为多少。
题解:线段树区间求和 | 树状数组区间求和
线段树:
#include <cstdio>
#define LC(a) ((a<<1))
#define RC(a) ((a<<1)+1)
#define MID(a,b) ((a+b)>>1)
using namespace std; typedef long long ll;
const int N=5e4*;
ll ans=; struct node{
ll l,r,sum;
}tree[N]; void pushup(ll p){
tree[p].sum=tree[LC(p)].sum+tree[RC(p)].sum;
} void build(ll p,ll l,ll r){
tree[p].l=l;
tree[p].r=r;
tree[p].sum=;
if(l==r){
scanf("%lld",&tree[p].sum);
return;
}
build(LC(p),l,MID(l,r));
build(RC(p),MID(l,r)+,r);
pushup(p);
} void query(ll p,ll l, ll r){
if(r<tree[p].l||l>tree[p].r) return;
if(l<=tree[p].l&&r>=tree[p].r){
ans+=tree[p].sum;
return;
}
query(LC(p),l,r);
query(RC(p),l,r);
} int main(){ ll n,q;
scanf("%lld",&n);
build(,,n);
scanf("%lld",&q);
while(q--){
ans=;
ll st,len;
scanf("%lld%lld",&st,&len);
query(,st,st+len-);
printf("%lld\n",ans);
} return ;
}
树状数组:
#include <cstdio>
#define low(i) ((i)&(-i))
using namespace std; const int N=5e4+;
typedef long long ll;
ll a[N];
int n,q; struct TreeArray {
ll c[N];
void add(int pos,ll v) {
for(int i=pos;i<=n;i+=low(i)) c[i]+=v;
}
ll query(int pos) {
ll res=;
for(int i=pos;i;i-=low(i)) res+=c[i];
return res;
}
}p; int main(){
scanf("%d",&n);
for(int i=;i<=n;i++) scanf("%lld",&a[i]);
for(int i=;i<=n;i++) p.add(i,a[i]);
scanf("%d",&q);
while(q--){
int st,len;
scanf("%d%d",&st,&len);
printf("%lld\n",p.query(st+len-)-p.query(st-));
}
return ;
}
前缀和:
#include <cstdio>
#define low(i) ((i)&(-i))
using namespace std; const int N=5e4+;
typedef long long ll;
ll sum[N];
int n,q; int main(){
sum[]=;
scanf("%d",&n);
for(int i=;i<=n;i++){
scanf("%lld",&sum[i]);
sum[i]+=sum[i-];
}
scanf("%d",&q);
while(q--){
int st,len;
scanf("%d%d",&st,&len);
printf("%lld\n",sum[st+len-]-sum[st-]);
}
return ;
}
51nod 1081 子段求和(线段树 | 树状数组 | 前缀和)的更多相关文章
- 51NOD 1081 子段求和
1081 子段求和 给出一个长度为N的数组,进行Q次查询,查询从第i个元素开始长度为l的子段所有元素之和. 例如,1 3 7 9 -1,查询第2个元素开始长度为3的子段和,1 {3 7 9} ...
- (前缀和 内存分配)51NOD 1081 子段求和
给出一个长度为N的数组,进行Q次查询,查询从第i个元素开始长度为l的子段所有元素之和. 例如,1 3 7 9 -1,查询第2个元素开始长度为3的子段和,1 {3 7 9} -1.3 + 7 + 9 ...
- 51nod 1680区间求和 (dp+树状数组/线段树)
不妨考虑已知一个区间[l,r]的k=1.k=2....k=r-l+1这些数的答案ans(只是这一个区间,不包含子区间) 那么如果加入一个新的数字a[i](i = r+1) 则新区间[l, i]的答案为 ...
- FZU2013 A short problem —— 线段树/树状数组 + 前缀和
题目链接:https://vjudge.net/problem/FZU-2013 Problem 2013 A short problem Accept: 356 Submit: 1083Ti ...
- CSU - 1551 Longest Increasing Subsequence Again —— 线段树/树状数组 + 前缀和&后缀和
题目链接:http://acm.csu.edu.cn/csuoj/problemset/problem?pid=1551 题意: 给出一段序列, 删除其中一段连续的子序列(或者不删), 使得剩下的序列 ...
- Codeforces Round #365 (Div. 2) D. Mishka and Interesting sum (离线树状数组+前缀xor)
题目链接:http://codeforces.com/contest/703/problem/D 给你n个数,m次查询,每次查询问你l到r之间出现偶数次的数字xor和是多少. 我们可以先预处理前缀和X ...
- 【51NOD-0】1081 子段求和
[算法]树状数组(区间和) [题解]记得开long long #include<cstdio> #include<cstring> #include<algorithm& ...
- ACM学习历程—HDU5700 区间交(树状数组 && 前缀和 && 排序)
http://acm.hdu.edu.cn/showproblem.php?pid=5700 这是这次百度之星初赛2B的第五题.省赛回来看了一下,有这样一个思路:对于所有的区间排序,按左值排序. 然后 ...
- MooFest 树状数组 + 前缀和
比较友好的数据结构题 建议读者好好思考思考--. 可以分析出与前缀和的关系, 之后就愉快的套起树状数组辣 #include <cstdio> #include<queue> # ...
随机推荐
- source map
一.source map 概述 我们在打包中,将开发环境中源代码经过压缩,去空格,babel编译转化,最终可以得到适用于生产环境的项目代码,这样处理后的项目代码和源代码之间差异性很大,会造成无法deb ...
- maven中jar下载失败
关键词:maven jar 错误描述:反编译时遇到 invalid LOC header (bad signature)的问题 aether-89969cb8-5741-44e3-be2c-74f90 ...
- Percona-xtrabackup 使用详解与原理
现在有个需求需要对使用 innodb 的数据库进行热备.网上查了很多工具皆推荐 Percona-xtrabackup 于是就仔细了解调研一番. 我们可以前往 https://www.percona.c ...
- WPF如何实现TreeView节点重命名
我们经常看到一些软件比如酷狗音乐,在对列表右键进行重命名的时候,当前列表会泛白并且进入可编辑状态,当我们更改完成后就会并进入非编辑状态,这些具体是怎么实现的呢?下面的方法也许会提供一些思路,下面的Tr ...
- MySQL中and和or的优先级的问题
参考资料: 关于MySQL中AND和OR的优先级的问题 SQL语句中的AND和OR执行顺序问题 MySQL带OR关键字的多条件查询
- delphi 子窗体只能最小化不能关闭的解决方案
cnpack下载地址:http://www.cnpack.org/showdetail.php?id=726&lang=zh-cn 时候创建的子窗体不能关闭,点关闭按钮时子窗体最小化了. 出现 ...
- k8s(一) kubeadm简单集群初始化
写给想入门kubernetes的同学们 # 系统版本 [root@master ~]# cat /etc/os-release NAME="CentOS Linux" VERSIO ...
- if 结构语句
if 条件: print()#不只是能输入print
- 数据库中事务的四大特性(ACID)
本篇讲诉数据库中事务的四大特性(ACID),并且将会详细地说明事务的隔离级别. 如果一个数据库声称支持事务的操作,那么该数据库必须要具备以下四个特性: ⑴ 原子性(Atomicity) 原子性是指事务 ...
- 了解AutoCAD对象层次结构 —— 4 —— 符号表
上一小节我们看到了符号表包含了一系列的表(共9个),这些表数量是固定的,用户不能增加新的表,也不能删除现有的表. 符号表名称 符号表功能 Block Table 块表 存储图形数据库中定义的块.此表中 ...