酷代码 AI
菜单
服务商
DeepSeek字节豆包
更多选项

黄金城堡线索收集:C++区间求和两种实现方法

这个问题本质上是**静态区间和查询**,因为n≤100,所以最简单的做法是直接对每个查询从L到R循环累加,完全足够。也可以预处理前缀和,复杂度更优。下面给出两种写法的C++代码。 ## C++ 解法一:直接模拟(简单易懂) ```cpp #include <iostream> using namespace std; int main() { int n, q; cin >> n >> q; int a[105]; for (int i = 1; i <= n; i++) { cin >> a[i]; } while (q--) { int L, R; cin >> L >> R; int sum = 0; for (int i = L; i <= R; i++) { sum += a[i]; } cout << sum << endl; } return 0; } ``` ## C++ 解法二:前缀和优化(高效,推荐) ```cpp #include <iostream> using namespace std; int main() { int n, q; cin >> n >> q; int a[105] = {0}; int prefix[105] = {0}; // prefix[i] 表示 a[1] 到 a[i] 的和 for (int i = 1; i <= n; i++) { cin >> a[i]; prefix[i] = prefix[i - 1] + a[i]; } while (q--) { int L, R; cin >> L >> R; cout << prefix[R] - prefix[L - 1] << endl; } return 0; } ``` ## 代码解释 - 解法一直接对每个查询遍历区间,因为n≤100,q也不大,所以完全可行。 - 解法二用前缀和数组`prefix`,先一遍预处理,之后每个查询只需O(1)时间算出结果。 - 注意数组下标从1开始,方便前缀和计算。 ######[AI问答 | 442点数解答 | 2026-08-16 10:04:08]

相关提问
本站限时免费提问中
实用工具查看更多
Linux在线手册 [开发类]
Jquery在线手册 [开发类]
今日油价 [生活类]
图片互转base64 [开发类]
时间转换器 [开发类]