fork download
  1. #include <iostream>
  2. #include <vector>
  3. #include <algorithm>
  4.  
  5. using namespace std;
  6.  
  7. // Function to compute prefix sums
  8. vector<long long> computePrefixSum(const vector<int>& arr) {
  9. int n = arr.size();
  10. vector<long long> prefixSum(n + 1, 0);
  11. for (int i = 0; i < n; i++) {
  12. prefixSum[i + 1] = prefixSum[i] + arr[i];
  13. }
  14. return prefixSum;
  15. }
  16.  
  17. // Function to find the sum in range using prefix sums
  18. long long rangeSum(const vector<long long>& prefixSum, int left, int right) {
  19. return prefixSum[right + 1] - prefixSum[left];
  20. }
  21.  
  22. int main() {
  23. int N;
  24. cin >> N;
  25.  
  26. vector<int> A(N);
  27. for (int i = 0; i < N; i++) {
  28. cin >> A[i];
  29. }
  30.  
  31. // Sort the array to efficiently answer range queries
  32. sort(A.begin(), A.end());
  33.  
  34. // Compute prefix sum
  35. vector<long long> prefixSum = computePrefixSum(A);
  36.  
  37. int Q;
  38. cin >> Q;
  39.  
  40. while (Q--) {
  41. int L, R;
  42. cin >> L >> R;
  43.  
  44. // Use binary search to find range indices
  45. auto leftIdx = lower_bound(A.begin(), A.end(), L) - A.begin();
  46. auto rightIdx = upper_bound(A.begin(), A.end(), R) - A.begin() - 1;
  47.  
  48. // Compute sum in range
  49. if (leftIdx <= rightIdx) {
  50. cout << rangeSum(prefixSum, leftIdx, rightIdx) << " ";
  51. } else {
  52. cout << "0 "; // No elements in range
  53. }
  54. }
  55.  
  56. cout << endl;
  57. return 0;
  58. }
  59.  
Success #stdin #stdout 0.01s 5292KB
stdin
6
0
2
5
9
12
18
2
2 5
1 3
stdout
7 2