树状数组,区间修改,区间查询

news2024/9/26 3:18:22

一个简单的整数问题2

  •    题目
  •    提交记录
  •    讨论
  •    题解
  •    视频讲解

给定一个长度为 NN 的数列 AA,以及 MM 条指令,每条指令可能是以下两种之一:

  1. C l r d,表示把 A[l],A[l+1],…,A[r]A[l],A[l+1],…,A[r] 都加上 dd。
  2. Q l r,表示询问数列中第 l∼rl∼r 个数的和。

对于每个询问,输出一个整数表示答案。

输入格式

第一行两个整数 N,MN,M。

第二行 NN 个整数 A[i]A[i]。

接下来 MM 行表示 MM 条指令,每条指令的格式如题目描述所示。

输出格式

对于每个询问,输出一个整数表示答案。

每个答案占一行。

数据范围

1≤N,M≤1051≤N,M≤105,
|d|≤10000|d|≤10000,
|A[i]|≤109|A[i]|≤109

输入样例:
10 5
1 2 3 4 5 6 7 8 9 10
Q 4 4
Q 1 10
Q 2 4
C 3 6 3
Q 2 4
输出样例:
4
55
9
15
#include <iostream>
using namespace std;
const int N=1e5+10;
typedef long long ll;
int n,m;
ll tr1[N],tr2[N];
int a[N],b[N];
int lowbit(int x)
{
    return x&(-x);
}
void add(ll tr[],int x,ll c)
{
    for(int  i=x;i<=n;i+=lowbit(i)) 
        tr[i]+=c;
}
ll sum(ll tr[],int x)
{
    ll res=0;
    for(int i=x;i;i-=lowbit(i))
        res+=tr[i];
    return res;
}
ll ans(int x)
{
    return sum(tr1,x)*(x+1)-sum(tr2,x);
}
int main()
{
    cin>>n>>m;
    for(int i=1;i<=n;i++)
    {
        cin>>a[i];
        b[i]=a[i]-a[i-1];
        add(tr1,i,b[i]);
        add(tr2,i,(ll)b[i]*i);
    }
    while(m--)
    {
        string s;
        int l,r;
        cin>>s>>l>>r;
        if(s=="Q")
        {
            cout<<ans(r)-ans(l-1)<<endl;
        }
        if(s=="C")
        {
            int c;
            cin>>c;
            add(tr1,l,c);
            add(tr1,r+1,-c);
            add(tr2,l,l*c);
            add(tr2,r+1,(r+1)*(-c));
        }
        
    }
    
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2165578.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Misc-流量分析基础

第一种&#xff1a;直接搜索flag字符串 第二种&#xff1a;flag进行了十六进制编码&#xff0c;通过十六进制编码解决 第三种&#xff1a;压缩包流量&#xff1a;tar.gz的压缩包可以直接在wireshark中解压查看&#xff0c;其他的压缩包则要将流量导出来&#xff0c;然后去解码…

微信小程序注册流程及APPID获取(完整版图文教程)

文章目录 前言1. 注册微信小程序账号1.1微信小程序注册1.2 点击注册按钮&#xff0c;进入小程序注册步骤。1.3 填写邮箱、密码、验证码1.4 用户信息登记1.5 微信扫码认证后&#xff0c;回到微信公众平台点击确认提交1.6 进小程序后台&#xff0c;完成注册 2.完善小程序账号信息…

力扣 困难 25.K个一组反转链表

文章目录 题目介绍题解 题目介绍 题解 先把链表的长度求出来&#xff0c;翻转前先判断剩余链表节点的个数&#xff0c;如果大于等于k则翻转&#xff0c;否则直接退出循环返回&#xff0c;每一个小组的翻转和上一题一样。 参考b站灵茶山艾府 class Solution {public ListNo…

汽车3d动画渲染选择哪个?选择最佳云渲染解决方案

面临汽车3D动画渲染挑战&#xff1f;选择正确的云渲染服务至关重要。探索最佳解决方案&#xff0c;优化渲染效率&#xff0c;快速呈现逼真动画。 汽车3d动画渲染选择哪个&#xff1f; 对于汽车3D动画渲染&#xff0c;选择哪个渲染器取决于你的项目需求、预算和期望的效果。Ble…

inBuilder零代码新版表单设计器特性一览

inBuilder零代码新版表单设计器正式上线&#xff0c;此次新版表单设计器相比旧版&#xff0c;优化了界面外观、提升了功能易用性、增加了许多新特性。下面跟随本文简要了解下零代码新设计器主要的几大新特性&#xff1a; 1. 优化设计器界面 新版设计器对表单上控件层级做了一…

素数判断-C语言

1.问题&#xff1a; 输入一个大于3的整数n&#xff0c;判断是否为素数&#xff08;质数&#xff09;。 2.解答&#xff1a; 对100-200之间的每一个数进行遍历&#xff0c;如果不能被3整除&#xff0c;就将此数输出&#xff0c;若能被3整除&#xff0c;就不输出此数。 3.代码&…

【CSP】2024第二轮前的准备工作

第二轮成绩还没出&#xff0c;估分有希望但不高&#xff0c;发个帖子涨rp 1. 大纲 目前最新版本2023版NOI大纲 &#xff0c;字字珠玑要细品&#xff0c;比如这次CSP-J第一轮就考到了格雷编码&#xff0c;没有经历GESP逐级洗礼的普娃哪知道这个啊。 2.在线培训 金牌教练在线…

线程的状态及常用方法

1. 线程的状态 在Java程序中&#xff0c;一个线程对象通过调用start()方法启动线程&#xff0c;并且在线程获取CPU时&#xff0c;自动执行run()方法。run()方法执行完毕&#xff0c;代表线程的生命周期结束。在整个线程的生命周期中&#xff0c;线程的状态有以下6种&#xff1…

network-scripts目录下没有ens33文件的问题

作者&#xff1a;程序那点事儿 日期&#xff1a;2023/11/09 06:52 systemctl start NetworkManager #开启网络管理器nmcli con show #查看ens33网卡对应的是ifcfg-Wired_connection_3这个文件&#xff08;网络管理器要开启&#xff0c;不然报错&#xff09;&#xff0c;或者根据…

分布式Redis(14)哈希槽

文章目录 一致性哈希算法理论普通哈希的问题一致性hash算法 Redis 使用哈希槽Redis Cluster集群 为什么Redis是使用哈希槽而不是一致性哈希呢&#xff1f;为什么Redis Cluster哈希槽数量是16384&#xff1f; 关键词&#xff1a;一致性 Hash&#xff0c;哈希槽&#xff0c; 带着…

双指针算法详解

什么是双指针 双指针算法是一种常用的算法策略&#xff0c;通常用于处理有序数组或链表&#xff0c;能够高效地解决许多问题。其核心思想是通过维护两个指针在数组或链表中移动&#xff0c;从而达到减少时间复杂度的目的。我们将通过三个示例代码来深入了解双指针算法的…

《动手学深度学习》笔记2.2——神经网络从基础→进阶 (参数管理-每层的权重/偏置)

目录 0. 前言 正文&#xff1a;参数管理 1. 参数访问 1.1 [目标参数] 1.2 [一次性访问所有参数] 1.3 [从嵌套块收集参数] 2. 参数初始化 2.1 [内置初始化] 2.2 [自定义初始化] 2.3 [参数绑定-共享参数] 3. 小结 4. 练习 0. 前言 课程全部代码&#xff08;pytorch版…

echarts地图的简单使用

echarts地图的简单使用 文章说明核心源码效果展示源码下载 文章说明 主要介绍echarts地图组件的简单使用&#xff0c;记录为文章&#xff0c;供后续查阅使用 目前只是简单的示例&#xff0c;然后还存在着一些小bug&#xff0c;主要是首个Legend的点击会导致颜色全部不展示的问题…

笔试编程-百战成神——Day02

1.简写单词 题目来源&#xff1a; 简写单词——牛客网 测试用例 算法原理 本题的主要难点就是如何识别每一个单词并且返回其首字母大写&#xff0c;最终组成一个新的字符串后输出&#xff0c;这里我们使用while(cin>>str)就可以解决&#xff0c;直接忽略每一个空格直接…

深入理解及如何使用main函数参数

目录 前言&#xff1a;一、main函数参数二、main函数参数的意义及如何使用三、从操作系统层面&#xff08;指令&#xff09;理解main函数参数 前言&#xff1a; 在平时编写代码的过程中&#xff0c;我们会经常写main函数&#xff0c;这是一个程序必不可少的&#xff0c;main 函…

信息汇总(避坑)系统

本系统前期设定为公司避坑系统&#xff0c;在此基础上衍生出公司信息汇总功能 主要功能点&#xff1a;避坑分类、标签、随笔记录、阅读人数、评论&#xff08;用户评论、匿名评论&#xff0c;评论回复等&#xff09;、系统留言&#xff08;支持表情留言&#xff09;、避坑信息…

JavaScript中的无穷大

JavaScript中的无穷大 溢出&#xff1a;overflow,数字结果超过JS表示的数字上限&#xff0c;结果为一个特殊的无穷大Infinity或负无穷大-Infinity. 下溢&#xff1a;underflow是当前结果无限接近于0比JS能表示的最小值还要小&#xff0c;将会返回0&#xff0c;负数下溢就是-0…

剑指offer JZ7 重建二叉树

描述&#xff1a; 给定节点数为 n 的二叉树的前序遍历和中序遍历结果&#xff0c;请重建出该二叉树并返回它的头结点。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6}&#xff0c;则重建出如下图所示。 思路&#xff1a; 这道题考察的是二叉树根据先序…

蓝桥杯备赛---引言

我是来自成都锦城学院的2021级学生&#xff0c;第一次参加第十五届蓝桥杯嵌入式赛道获得了国二的名次&#xff0c;接下来将为大家分享各个模块的代码&#xff0c;可以速成省一&#xff0c;但想要取得国一的成绩则需要补偿数据结构、基本c语言函数等相关知识&#xff0c;很遗憾没…