本文分享的必刷题目是从蓝桥云课、洛谷、AcWing等知名刷题平台精心挑选而来,并结合各平台提供的算法标签和难度等级进行了系统分类。题目涵盖了从基础到进阶的多种算法和数据结构,旨在为不同阶段的编程学习者提供一条清晰、平稳的学习提升路径。
欢迎大家订阅我的专栏:算法题解:C++与Python实现!
附上汇总贴:算法竞赛备考冲刺必刷题(C++) | 汇总
【题目来源】
AcWing:795. 前缀和 - AcWing题库
【题目描述】
输入一个长度为 n n n 的整数序列。
接下来再输入 m m m 个询问,每个询问输入一对 l , r l,r l,r。
对于每个询问,输出原序列中从第 l l l 个数到第 r r r 个数的和。
【输入】
第一行包含两个整数 n n n 和 m m m。
第二行包含 n n n 个整数,表示整数数列。
接下来 m m m 行,每行包含两个整数 l l l 和 r r r,表示一个询问的区间范围。
【输出】
共 m m m 行,每行输出一个询问的结果。
【输入样例】
5 3
2 1 3 6 4
1 2
1 3
2 4
【输出样例】
3
6
10
【解题思路】
【算法标签】
《AcWing 795 前缀和》 #前缀和#
【代码详解】
#include <bits/stdc++.h>
using namespace std;
const int N = 100010; // 定义数组最大长度
int n, m; // n: 数组长度, m: 查询次数
int a[N]; // 存储原始数组
int s[N]; // 存储前缀和数组
int main()
{
// 输入数组长度和查询次数
scanf("%d%d", &n, &m);
// 输入数组元素
for (int i = 1; i <= n; i++)
{
scanf("%d", &a[i]);
}
// 计算前缀和数组
for (int i = 1; i <= n; i++)
{
s[i] = s[i - 1] + a[i];
}
// 处理每个查询
while (m--)
{
int l, r; // 查询区间左右端点
scanf("%d%d", &l, &r);
// 输出区间和:前缀和数组相减
printf("%d\n", s[r] - s[l - 1]);
}
return 0;
}
【运行结果】
5 3
2 1 3 6 4
1 2
3
1 3
6
2 4
10