#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = 1e5 + 10;
LL a[N], b[N];
LL sum1[N], sum2[N];
int n;
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin >> n; // 输入n
for (int i = 1; i <= n; i++) {
cin >> a[i]; // 输入数组元素a[i]
b[i] = a[i]; // 复制数组元素到数组b[i]
// 计算前缀和,sum1[i]表示a数组从1到i的元素和
sum1[i] = sum1[i - 1] + a[i];
}
sort(b + 1, b + 1 + n); // 对数组b进行排序
for (int i = 1; i <= n; i++) {
// 计算前缀和,sum2[i]表示b数组从1到i的元素和
sum2[i] = sum2[i - 1] + b[i];
}
int q; // 查询次数
cin >> q;
while (q--) {
int op, l, r;
cin >> op >> l >> r;
if (op == 1)
cout << sum1[r] - sum1[l - 1] << "\n"; // 输出查询区间的和,使用前缀和
else
cout << sum2[r] - sum2[l - 1] << "\n"; // 输出查询区间的和,使用前缀和
}
return 0;
}
问题 :前缀和序列
于 2024-08-15 18:05:39 首次发布