给定一个n个正整数组成的数组_算法基础课acwing下载

给定一个n个正整数组成的数组_算法基础课acwing下载给定一个长度为 N 的数列 A,以及 M 条指令,每条指令可能是以下两种之一:C l r d,表示把 A[l],A[l+1],…,A[r] 都加上 d。Q l r,表示询问数列中第 l∼r 个数的和。对于每个询问,输出一个整数表示答案。输入格式第一行两个整数 N,M。第二行 N 个整数 A[i]。接下来 M 行表示 M 条指令,每条指令的格式如题目描述所示。输出格式对于每个询问,输出一个整数表示答案。每个答案占一行。数据范围1≤N,M≤105,|d|≤10000,|A[i]|≤1

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

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

C l r d,表示把 A[l],A[l+1],…,A[r] 都加上 d。
Q l r,表示询问数列中第 l∼r 个数的和。
对于每个询问,输出一个整数表示答案。

输入格式
第一行两个整数 N,M。

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

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

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

每个答案占一行。

数据范围
1≤N,M≤105,
|d|≤10000,
|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<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 1e5 + 10;
int a[N];
long long d[N],trie1[N],trie2[N];
int lowbit(int x){ 
   
    return x & (-x);
}
int n,m;
void add(int x,ll y){ 
   
    int t = x;
    while(t <= n + 1){ 
   
        trie1[t] +=  y;
        t += lowbit(t);
    }
    t = x;
    while(t <= n + 1){ 
   
        trie2[t] =trie2[t] + (x * y);
        t += lowbit(t);
    }
}
ll query(int x){ 
   
    ll sum = 0;
    int t = x;
    while(t){ 
   
        sum += trie1[t];
        t -= lowbit(t);
    }
    sum = sum * (x + 1);
    t = x;
    while(t){ 
   
        sum -= trie2[t];
        t -= lowbit(t);
    }
    return sum;
}
int main(){ 
   
    cin>>n>>m;
    int x;
    for(int i = 1;i <= n;i ++){ 
   
        cin>>a[i];
        d[i] = a[i] - a[i - 1];
    }
    for(int i = 1;i <= n;i ++){ 
   
        add(i,d[i]);
    }
    char ch;
    int y,d;
    for(int i = 0;i < m;i ++){ 
   
        cin>>ch>>x>>y;
        if(ch == 'C')cin>>d;
        if(ch == 'Q'){ 
   
            cout<<query(y) - query(x - 1)<<endl;
        }
        else add(x,d),add(y + 1,-d);
    }
    return 0;
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/169100.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • linux编辑文件命令vim怎么退出_vim退出命令

    linux编辑文件命令vim怎么退出_vim退出命令一、进入文件vim/etc/profile二、编辑文件按i进行编辑三、保存与退出1.首先按esc键返回命令编辑模式,刚才的Insert会消失2.按英文状态的:3.此时进行:q!不保存文件,强制退出vi命令:w保存文件,不退出vi命令:wq保存文件,退出vi命令4.输入以上命令按enter进行…

    2022年8月24日
    7
  • 安装centos6.5 i686,安装vnc,配置中文界面

    安装centos6.5 i686,安装vnc,配置中文界面1.1、安装vmwaretools可以调节屏幕分辨率,同时把时间自动同步到宿主机的时间1.2、重启后修改分辨率,修改运行级别为3,然后重启开机启动图形模式(5)、文本模式(3),文本模式没有xwindow运行,图形模式即使切换到文本模式控制台,xwindow仍然运行1.3、修改网络配置cateth0的配置文件时,dhcp的,但是ifconfigeth0没有ip

    2022年5月24日
    37
  • java getclassloader_java-关于getClass().getClassLoader()

    java getclassloader_java-关于getClass().getClassLoader()InputStreamis=getClass().getClassLoader().getResourceAsStream(“helloworld.properties”);中getClass()和getClassLoader()都是什么意思呀.getClass():取得当前对象所属的Class对象getClassLoader():取得该Class对象的类装载器类装载器负责从Java字符文件…

    2022年5月2日
    40
  • Flicker-detect Sensor_sensorless sensing

    Flicker-detect Sensor_sensorless sensingSensor在日光灯作为光源下获取图像数据时会产生flicker,其根本原因是照在不同pixel上光能量不同产生的,所接受的光能量的不同也就是图像的亮度的不同。电源的频率有两种标准:50Hz(大陆)和60Hz(台湾、日本)的正弦波形,当然能量是没有方向性的,因此对应的能量是一个频率为100Hz和120Hz的波形,如下图1所示:图1、60Hz电源频率及能量波形      由于能量在时间…

    2022年10月13日
    3
  • spdLog的使用

    spdLog的使用以下为收集到或者个人测试的内容,侵权删一.优点非常快使用自带的例子测试写log,利用次数/时钟周期衡量结果*******************************************************************************Singlethread,1,000,000iteration

    2022年6月23日
    73
  • 世界一级行政区划图_世界行政区划图册

    世界一级行政区划图_世界行政区划图册序号 国家 省 城市 8168 波兰 下西里西亚省   8169 波兰 下西里西亚省 下布热格 8170 波兰 下西里西亚省 佩希采 8171 波兰 下西里西亚省 克沃兹科 8172 波兰 下西里西亚省 兹戈热莱茨 8173 波兰 下西里西亚省 兹沃托雷亚 8174 波兰 下西里西亚省 博莱斯瓦维茨 8175 波兰 下西里

    2022年9月29日
    6

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号