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 search/pull 报错

    docker报错 Get https://registry-1.docker.io/v2/: x509: certificate has expired or is not yet valid 这种错 ...

  2. 跟我学SpringCloud | 第八篇:Spring Cloud Bus 消息总线

    SpringCloud系列教程 | 第八篇:Spring Cloud Bus 消息总线 Springboot: 2.1.6.RELEASE SpringCloud: Greenwich.SR1 如无特 ...

  3. 订Pizza(Java)

    帮朋友改的一个订pizza的作业 大概要求就是输入判断,选择pizza的个数和种类,然后返回一个价格 代码放在下面,如果有刚学Java的同学可以参考一下,没有什么难度 public class Piz ...

  4. Java并发包中线程池ThreadPoolExecutor原理探究

    一.线程池简介 线程池的使用主要是解决两个问题:①当执行大量异步任务的时候线程池能够提供更好的性能,在不使用线程池时候,每当需要执行异步任务的时候直接new一个线程来运行的话,线程的创建和销毁都是需要 ...

  5. 在SpringBoot中使用RabbitMQ

    目录 RabbitMQ简介 RabbitMQ在CentOS上安装 配置文件 实践 概述 Demo 遇到的BUG 启动异常 无法自动创建队列 RabbitMQ简介 wikipedia RabbitMQ在 ...

  6. java LineNumberReader的使用

    前段时间需要读报表打印,需求是可以从第N行读到第N行,发现百度出来的LineNumberReader方法都不怎么理想 然后就找到一篇和众百度里脱颖而出的好文章,所以分享之:   从类 的命名来看,貌似 ...

  7. GStreamer基础教程04 - 动态连接Pipeline

    摘要 在以前的文章中,我们了解到了2种播放文件的方式:一种是在知道了文件的类型及编码方式后,手动创建所需Element并构造Pipeline:另一种是直接使用playbin,由playbin内部动态创 ...

  8. python文件下载

    1. 场景描述 刚好总结Java项目的web文件下载(附方案及源码配置),想起python项目也有用到文件下载,就也介绍下吧. 2. 解决方案 使用python的第三方组件Flask来实现文件下载功能 ...

  9. Spring Boot微服务电商项目开发实战 --- 多环境部署配置、端口号统一配置及Dubbo提供者消费者实现

    昨天已经搭建好了SpringBoot基于Maven的基础父子级项目,今天开始进入项目分模块及分布式实现.首先我们基于昨天的项目,在父级工程下建lyn-sys,lyn-customer,lyn-good ...

  10. Java编程思想:压缩

    import java.io.*; import java.util.Enumeration; import java.util.zip.*; public class Test { public s ...