poj 3486 A Simple Problem with Integers(树状数组第三种模板改段求段)

简介:

/*
    树状数组第三种模板(改段求段)不解释! 
       不明白的点这里:here!
*/
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#define N 100005
using namespace std;

typedef long long LL;

LL ss[N], B[N], C[N];

int n, m;

void addB(int x, int k){//B[i]表示被1...i整体一共加了多少的总和 
    for(int i=x; i<=n; i+=i&(-i))  B[i]+=x*k; 
}

void addC(int x, int k){//1....x节点的每个节点的增量 
    for(int i=x; i>0; i-=i&(-i))   C[i]+=k;
}

LL sumB(int x){
    LL s=0;
    for(int i=x; i>0; i-=i&(-i)) s+=B[i];
    return s;
}

LL sumC(int x){//x节点总共的增量 
    LL s=0;
    for(int i=x; i<=n; i+=i&(-i)) s+=C[i];
    return s;
}

LL sum(int x){
    return x==0 ? 0 : sumC(x)*x + sumB(x-1); 
}

void update(int a, int b, int c){
    addB(b, c);
    addC(b, c);
    if(a-1>0){
        addB(a-1, -c); 
        addC(a-1, -c);
    }
}

int main(){
    int m;
    while(scanf("%d%d", &n, &m)!=EOF){
        for(int i=1; i<=n; ++i){
            scanf("%lld", &ss[i]);
            ss[i]+=ss[i-1];
        } 
        char ch[2];
        int a, b, c;
        while(m--){
            scanf("%s", ch); 
            if(ch[0]=='Q'){
                scanf("%d%d", &a, &b);
                printf("%lld\n", ss[b]-ss[a-1]+sum(b)-sum(a-1));
            }
            else{
                scanf("%d%d%d", &a, &b, &c);
                update(a, b, c); 
            }
        }
    }
    return 0;
}

目录
相关文章
|
监控 前端开发 测试技术
前端研发流程的深入解析:从构思到交付
前端研发流程的深入解析:从构思到交付
399 0
|
自然语言处理 前端开发 测试技术
前端工程化最佳实践:项目结构、代码规范和文档管理
前端工程化最佳实践:项目结构、代码规范和文档管理
|
消息中间件 JSON Kafka
【十九】初学Kafka并实战整合SpringCloudStream进行使用
【十九】初学Kafka并实战整合SpringCloudStream进行使用
452 1
【十九】初学Kafka并实战整合SpringCloudStream进行使用
EMQ
|
存储 缓存 监控
EMQX Enterprise 5.5 发布:新增 Elasticsearch 数据集成
在这个版本中,我们引入了一系列新的功能和改进,包括对 Elasticsearch 的集成、Apache IoTDB 和 OpenTSDB 数据集成优化、授权缓存支持排除主题等功能。此外,新版本还进行了多项改进以及 BUG 修复,进一步提升了整体性能和稳定性。
EMQ
148 73
EMQX Enterprise 5.5 发布:新增 Elasticsearch 数据集成
|
运维 监控 Cloud Native
设计与构建 FinOps 流程、团队、体系与目标
企业 FinOps 实施不是一蹴而就的项目,如果您正在推进企业云原生 FinOps 落地,除了选择合适的技术手段,企业内部的流程和体系建设也尤为重要。
164562 102
|
机器学习/深度学习 算法 PyTorch
深度学习笔记(十三):IOU、GIOU、DIOU、CIOU、EIOU、Focal EIOU、alpha IOU、SIOU、WIOU损失函数分析及Pytorch实现
这篇文章详细介绍了多种用于目标检测任务中的边界框回归损失函数,包括IOU、GIOU、DIOU、CIOU、EIOU、Focal EIOU、alpha IOU、SIOU和WIOU,并提供了它们的Pytorch实现代码。
2794 1
深度学习笔记(十三):IOU、GIOU、DIOU、CIOU、EIOU、Focal EIOU、alpha IOU、SIOU、WIOU损失函数分析及Pytorch实现
|
12月前
|
C语言
探索操作系统的心脏:内核与用户空间的交互
本文将深入操作系统的核心,揭示其内部结构与运作原理。我们将通过浅显易懂的方式,探讨操作系统的两个主要组成部分:内核和用户空间。文章旨在帮助读者理解这两者之间的界限以及它们如何协同工作来管理计算机资源。我们还将介绍系统调用的概念,并展示一个简单的代码示例,以便读者更好地理解这一过程。
|
数据采集 存储 Web App开发
Python-数据爬取(爬虫)
【7月更文挑战第15天】
846 3
|
消息中间件 固态存储 RocketMQ
RocketMQ消息堆积常见场景与处理方案
文章分析了在使用RocketMQ时消息堆积的常见场景,如消费者注册失败或消费速度慢于生产速度,并提供了相应的处理方案,包括提高消费并行度、批量消费、跳过非重要消息以及优化消费代码业务逻辑等。