http://cogs.pro:8080/cogs/problem/problem.php?pid=pyNimmVeq

264. 数列操作

★☆   输入文件:shulie.in   输出文件:shulie.out   简单对比
时间限制:1 s   内存限制:160 MB

【问题描述】

给定一个数列 A,请实现如下两种操作:

1. 将 Ak 的值加 d。

2. 查询 As+As+1+⋯+At(s≤t) 的值。

【输入格式】

第一行为一个整数 n(0≤n≤100000),表示数列 A 的大小。

第二行有 n 个整数,表示序列 A 各项的初始值。

第三行为一个整数 m(0≤m≤150000),表示操作数。

下面 m 行,每行描述一个操作:

ADD k d(表示将 Ak 的值增加 d,1≤k≤n,d 为整数)

SUM s t(表示查询 As+⋯+At 的值)

【输出格式】

对于每一个询问,输出查询的结果。

【样例输入】

4
1 4 2 3
3
SUM 1 3
ADD 2 50
SUM 2 3

【样例输出】

7
56 那么非常显然 这就是一道模板题
单点修改 区间查询 (其实也就是一个树状数组或者线段树板子)
不多说了 来粘一段代码吧 1.线段树
#include<cstdio>
#include<iostream>
#include<cmath>
#include<algorithm>
#define maxn 100005
using namespace std;
int n,m,a[maxn];
struct SegmentTree{
int l,r;
long long dat;
}t[maxn<<];
void build(int p,int l,int r){
t[p].l=l;
t[p].r=r;
if(l==r){
t[p].dat=a[l];
return;
}
int mid=(l+r)>>;
build(p*,l,mid);
build(p*+,mid+,r);
t[p].dat=t[p*].dat+t[p*+].dat;
}
void Add(int p,int x,int v){
if(t[p].l==t[p].r){
t[p].dat+=v;
return;
}
int mid=(t[p].l+t[p].r)>>;
if(x<=mid)
Add(p*,x,v);
else Add(p*+,x,v);
t[p].dat=t[p*].dat+t[p*+].dat;
}
long long Ask(int p,int l,int r){
if(l<=t[p].l&&r>=t[p].r)
return t[p].dat;
int mid=(t[p].l+t[p].r)>>;
long long val=;
if(l<=mid)
val+=Ask(p*,l,r);
if(r>mid)
val+=Ask(p*+,l,r);
return val;
}
int main()
{
freopen("shulie.in","r",stdin);
freopen("shulie.out","w",stdout);
scanf("%d",&n);
for(int i=;i<=n;i++) scanf("%d",&a[i]);
build(,,n);
scanf("%d",&m);
for(int i=;i<=m;i++){
string s;cin>>s;
if(s[]=='S'){
int l,r;scanf("%d%d",&l,&r);
printf("%lld\n",Ask(,l,r));
}
else{
int x,v;scanf("%d%d",&x,&v);
Add(,x,v);
}
}
return ;
}

2.树状数组

#include<cstdio>
#include<iostream>
#include<cmath>
#include<algorithm>
#define maxn 100005
using namespace std;
int n,m,a[maxn];
long long sum[maxn];
int lowbit(int x){ return x&(-x);}
void Add(int x,int d){
while(x<=n){sum[x]+=d;x+=lowbit(x); }
}
long long Sum(int x){
long long ret=;
while(x>){ ret+=sum[x];x-=lowbit(x);}
return ret;
}
int main()
{
freopen("shulie.in","r",stdin);
freopen("shulie.out","w",stdout);
scanf("%d",&n);
for(int i=;i<=n;i++) scanf("%d",&a[i]),Add(i,a[i]);
scanf("%d",&m);
for(int i=;i<=m;i++){
string s;cin>>s;
if(s[]=='S'){
int l,r;scanf("%d%d",&l,&r);
printf("%lld\n",Sum(r)-Sum(l-));
}
else{
int x,v;scanf("%d%d",&x,&v);
Add(x,v);
}
} return ;
}

666 加油吧 背板子走天下

 
												

cogs 264. 数列操作 单点修改 区间查询的更多相关文章

  1. COGS 264. 数列操作

    时间限制:1 s   内存限制:160 MB [问题描述] 假设有一列数 {Ai }(1 ≤ i ≤ n) ,支持如下两种操作: (1)将 A k 的值加 D .( k, D 是输入的数) (2) 输 ...

  2. COGS.264.数列操作(分块 单点加 区间求和)

    题目链接 #include<cmath> #include<cstdio> #include<cctype> #include<algorithm> u ...

  3. COGS 2638. 数列操作ψ 线段树

    传送门 : COGS 2638. 数列操作ψ 线段树 这道题让我们维护区间最大值,以及维护区间and,or一个数 我们考虑用线段树进行维护,这时候我们就要用到吉司机线段树啦 QAQ 由于发现若干次an ...

  4. HDU 1166 敌兵布阵 (树状数组 单点修改+区间查询)

    题目链接 Problem Description C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国在海岸线沿直线布置了N个工兵营地,Derek和T ...

  5. cogs 1317. 数列操作C 区间修改 区间查询

    1317. 数列操作C ★★★   输入文件:shuliec.in   输出文件:shuliec.out   简单对比时间限制:1 s   内存限制:128 MB [题目描述] 假设有一个长度为 n( ...

  6. cogs 1316. 数列操作B 区间修改 单点查询

    1316. 数列操作B ★★   输入文件:shulieb.in   输出文件:shulieb.out   简单对比时间限制:1 s   内存限制:128 MB [问题描述] 假设有一个大小为 n(n ...

  7. I Hate It:线段树:单点修改+区间查询

    I Hate It Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  8. HDU 1166 敌兵布阵 <线段树 单点修改 区间查询>

    敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...

  9. POJ 3321 Apple Tree(DFS序+线段树单点修改区间查询)

    Apple Tree Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 25904   Accepted: 7682 Descr ...

随机推荐

  1. docker无法启动

    docker无法启动 docker启动时报错Error starting daemon: SELinux is not supported with the overlay2 graph driver ...

  2. SQL Server温故系列(4):SQL 查询之集合运算 & 聚合函数

    1.集合运算 1.1.并集运算 UNION 1.2.差集运算 EXCEPT 1.3.交集运算 INTERSECT 1.4.集合运算小结 2.聚合函数 2.1.求行数函数 COUNT 2.2.求和函数 ...

  3. Flutter学习笔记(4)--Dart函数

    如需转载,请注明出处:Flutter学习笔记(4)--Dart函数 Dart是一个面向对象的语言,所以函数也是对象,函数属于Function对象,函数可以像参数一样传递给其他函数,这样便于做回调处理: ...

  4. Mllib数据类型(密集向量和稀疏向量)

    1.局部向量 Mllib支持2种局部向量类型:密集向量(dense)和稀疏向量(sparse). 密集向量由double类型的数组支持,而稀疏向量则由两个平行数组支持. example: 向量(5.2 ...

  5. py+selenium+unittest遇到HTMLTestRunner_cn文件报错:ZeroDivisionError: float division by zero【已解决】

    问题:遇到HTMLTestRunner_cn文件报错:ZeroDivisionError: float division by zero HTMLTestrunner_cn.py是从网上下的,照理说应 ...

  6. Docker实现GPA+Exporter监控告警系统

    Docker实现GPA+Exporter监控告警系统 1.搭建grafana,prometheus,blackbox_exporter环境 # docker run -d -p 9090:9090 - ...

  7. Android 开发感想

    18年从.net转行做安卓开发,现在已经过去一年多了.说一下感想和心得体会! 一.开始 说一下我的经厉,从毕业开始出来工作一直是从事.net方向的开发工作.一开始也是没什么经验,加上也没有其他手艺就找 ...

  8. 网络框架,互联网的组成,OSI七层协议,抽象层

    6.25自我总结 1.网络框架 1.单机 单机游戏 以下两个基于网络的 2.CS架构 cs--->client客户/server服务 服务端(应用程序)一个就够了,客户端(应用程序)可以有多个 ...

  9. C#3.0新增功能09 LINQ 基础03 LINQ 和泛型类型

    连载目录    [已更新最新开发文章,点击查看详细] LINQ 查询基于 .NET Framework 版本 2.0 中引入的泛型类型. 无需深入了解泛型即可开始编写查询. 但是,可能需要了解 2 个 ...

  10. [小米OJ] 7. 第一个缺失正数

    思路: 参考这个思路 即:将每个数字放在对应的第几个位置上,比如1放在第1个位置上,2放在第2个位置上. 注意几个点:将每个数放在它正确的位置,前提是该数是正数,并且该数小于序列长度,并且交换的两个数 ...