输入一个长度为 n 的整数序列。
接下来再输入 m 个询问,每个询问输入一对 l,r。
对于每个询问,输出原序列中从第 l 个数到第 r 个数的和。
输入格式
第一行包含两个整数 n 和 m。
第二行包含 n 个整数,表示整数数列。
接下来 m 行,每行包含两个整数 l 和 r,表示一个询问的区间范围。
输出格式
共 m 行,每行输出一个询问的结果。
数据范围
1 ≤ l ≤ r ≤ n,
1 ≤ n, m ≤ 100000,
−1000 ≤ 数列中元素的值 ≤ 1000
输入样例:
5 3
2 1 3 6 4
1 2
1 3
2 4
输出样例:
3
6
10
#include<iostream>usingnamespace std;int n, m, a, b;int num[100010];intmain(){
cin >> n >> m;for(int i =1; i <= n; i ++){
cin >> a;
num[i]= num[i -1]+ a;}for(int i =0; i < m; i ++){
cin >> a >> b;
cout << num[b]- num[a -1]<< endl;}return0;}
输入一个长度为 n 的整数序列。
接下来输入 m 个操作,每个操作包含三个整数 l,r,c,表示将序列中 [l,r] 之间的每个数加上 c。
请你输出进行完所有操作后的序列。
输入格式
第一行包含两个整数 n 和 m。
第二行包含 n 个整数,表示整数序列。
接下来 m 行,每行包含三个整数 l,r,c,表示一个操作。
输出格式
共一行,包含 n 个整数,表示最终序列。
数据范围
1 ≤ n,m ≤ 100000,
1 ≤ l ≤ r ≤ n,
−1000 ≤ c ≤ 1000,
−1000 ≤ 整数序列中元素的值 ≤ 1000
输入样例:
6 3
1 2 2 1 2 1
1 3 1
3 5 1
1 6 1
输出样例:
3 4 5 3 4 2
#include<bits/stdc++.h>usingnamespace std;int n, m;int a[100010], b[100010];voidinsert(int l,int r,int c){
b[l]+= c;
b[r +1]-= c;}intmain(){
cin >> n >> m;for(int i =1; i <= n; i ++){
cin >> a[i];insert(i, i, a[i]);// 构建差分数组 }for(int i =0; i < m; i ++){int l, r, c;
cin >> l >> r >> c;insert(l, r, c);}for(int i =1; i <= n; i ++) b[i]+= b[i -1];// 前缀和for(int i =1; i <= n; i ++) cout << b[i]<<" ";return0;}
基础算法:前缀和与差分前缀和子矩阵的和差分差分矩阵前缀和题目题解#include <iostream>using namespace std;int n, m, a, b;int num[100010];int main(){ cin >> n >> m; for (int i = 1; i <= n; i ++ ) { cin >> a; num[i] = num[i - 1] + a; } for (int i =