题解
2026-07-19 10:25:06
发布于:湖南
10阅读
0回复
0点赞
题意
给定长度为 的正整数数组 ,复制数组排序得到升序数组 。
次区间查询,每次给 、、:
:输出原数组 中 区间和
:输出排序后数组 中 区间和
思路
读取原数组 ,同步计算原数组前缀和 ( 代表 前 项总和)。
使用 sort 将数组 升序排序,计算排序数组前缀和 ( 代表 前 项总和)。
处理 次询问:
:
:
注意:数值可能溢出,使用 long long 存储数组与前缀和。
完整代码
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N = 1e5 + 5;
int n,q;
int a[N];
int u[N],v[N];
signed main() {
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> a[i];
u[i] = u[i-1] + a[i];
}
sort(a+1,a+1+n);
for (int i = 1; i <= n; i++) {
v[i] = v[i-1] + a[i];
}
cin >> q;
while (q--) {
int t,l,r;
cin >> t >> l >> r;
if (t == 1) cout << u[r] - u[l-1] << '\n';
else cout << v[r] - v[l-1] << '\n';
}
return 0;
}

这里空空如也








有帮助,赞一个