C++ 前缀交替和求解区间交替运算问题
## 🧮 问题理解 题目要求对数组前 k 项进行交替加减运算:`a[1] - a[2] + a[3] - a[4] + ...`。直接对每次询问从 1 到 k 遍历计算会超时(若 m 和 n 都很大)。最佳方案是预处理前缀交替和,将每次询问的复杂度降为 O(1)。 ## 💡 核心思路 定义前缀交替和数组 `pre[i]`,表示前 i 项的交替运算结果。 递推公式: - 当 i 为奇数时,`pre[i] = pre[i-1] + a[i]` - 当 i 为偶数时,`pre[i] = pre[i-1] - a[i]` 那么每次询问 k,直接输出 `pre[k]` 即可。 ## 🧪 输入输出示例 输入: ``` 5 3 1 2 3 4 5 1 3 5 ``` 计算过程: - pre[1] = 1 - pre[2] = 1 - 2 = -1 - pre[3] = -1 + 3 = 2 - pre[4] = 2 - 4 = -2 - pre[5] = -2 + 5 = 3 输出: ``` 1 2 3 ``` ## 📝 C++ 代码实现 ```cpp #include <iostream> #include <vector> using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int n, m; cin >> n >> m; vector<long long> a(n + 1); for (int i = 1; i <= n; i++) { cin >> a[i]; } vector<long long> pre(n + 1, 0); for (int i = 1; i <= n; i++) { if (i % 2 == 1) { pre[i] = pre[i - 1] + a[i]; } else { pre[i] = pre[i - 1] - a[i]; } } for (int q = 0; q < m; q++) { int k; cin >> k; cout << pre[k] << '\n'; } return 0; } ``` ## ⚙️ 复杂度分析 - 预处理:O(n) - 每次询问:O(1) - 总时间复杂度:O(n + m) - 空间复杂度:O(n) ######[AI问答 | 577点数解答 | 2026-08-29 22:07:28]
- Python实现:随机录入45位学生四次成绩函数大揭秘(GPT | 477点数解答 | 2024-12-17 17:00:35)448
- Python实现班级45位同学成绩生成、总评计算及分数统计(字节豆包 | 579点数解答 | 2024-12-21 11:55:01)333
- Python实现45位学生四次成绩随机录入及输出(GPT | 441点数解答 | 2024-12-21 21:02:22)338
- Python实战:45位同学成绩生成、总评计算与分数统计揭秘(字节豆包 | 688点数解答 | 2024-12-22 10:14:17)322
- C++实现:输入整数英文单词算乘积,输出数字与英文结果,可多次计算!(GPT | 2268点数解答 | 2024-05-24 01:55:27)452
- C语言巧解:计算整数区间内最遥远素数差值(阿里通义 | 428点数解答 | 2024-11-22 14:53:33)228
- C++ 实现:根据给定序列与条件计算满足要求的整数对数量(字节豆包 | 232点数解答 | 2025-04-23 17:33:20)212
- C++ 求解满足特定条件整数对数量:从 O(M^2) 到 O(N + M) 的优化(百度文心 | 1197点数解答 | 2025-04-23 17:36:27)291
- 浙闽“板凳龙”舞龙队 300 秒螺线盘入:位置与速度全揭秘(阿里通义 | 886点数解答 | 2024-09-07 10:31:31)741
- 浙闽“板凳龙”舞龙队 300 秒位置与速度数学模型揭秘(GPT | 565点数解答 | 2024-09-07 10:32:56)624
- 223节板凳龙沿等距螺线盘入:300秒内位置与速度的数学揭秘 (讯飞星火 | 443点数解答 | 2024-09-07 10:34:10)465
- 浙闽“板凳龙”300秒舞龙轨迹与速度:数学模型揭秘!(字节豆包 | 522点数解答 | 2024-09-07 10:35:06)421