fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4.  
  5. vector<long long> getMinConnectionCost(vector<int>& warehouseCapacity, vector<vector<int>>& additionalHubs) {
  6. int n = warehouseCapacity.size();
  7.  
  8. vector<long long> prefixSum(n + 1, 0);
  9. for (int i = 0; i < n; ++i) {
  10. prefixSum[i + 1] = prefixSum[i] + warehouseCapacity[i];
  11. }
  12.  
  13. std::vector<long long> results;
  14.  
  15. for (const auto& query : additionalHubs) {
  16. int hubA = query[0];
  17. int hubB = query[1];
  18.  
  19. int ha = hubA - 1;
  20. int hb = hubB - 1;
  21.  
  22. long long totalCost = 0;
  23.  
  24. if (ha > 0) {
  25. long long cost1 = (long long)ha * warehouseCapacity[ha] - prefixSum[ha];
  26. totalCost += cost1;
  27. }
  28.  
  29. if (hb > ha + 1) {
  30. long long count2 = hb - ha - 1;
  31. long long sum_capacities2 = prefixSum[hb] - prefixSum[ha + 1];
  32. long long cost2 = count2 * warehouseCapacity[hb] - sum_capacities2;
  33. totalCost += cost2;
  34. }
  35.  
  36. if (n - 1 > hb + 1) {
  37. long long count3 = (n - 1) - (hb + 1); // Number of warehouses in range [hb+1, n-2]
  38. long long sum_capacities3 = prefixSum[n - 1] - prefixSum[hb + 1];
  39. long long cost3 = count3 * warehouseCapacity[n - 1] - sum_capacities3;
  40. totalCost += cost3;
  41. }
  42.  
  43. results.push_back(totalCost);
  44. }
  45.  
  46. return results;
  47. }
  48.  
  49. int main() {
  50. // your code goes here
  51. int n;
  52. cin >> n;
  53. vector<int> warehouseCapacity(n);
  54. for (int i=0;i<n;i++) cin >> warehouseCapacity[i];
  55.  
  56. int m;
  57. cin >> m;
  58. vector<vector<int>> additionalHubs;
  59. for (int i=0;i<m;i++) {
  60. int x,y;
  61. cin >> x >> y;
  62. additionalHubs.push_back({x, y});
  63. }
  64.  
  65. vector<long long> ans = getMinConnectionCost(warehouseCapacity, additionalHubs);
  66.  
  67. for(auto x: ans) {
  68. cout << x << " ";
  69. }
  70.  
  71. return 0;
  72. }
Success #stdin #stdout 0.01s 5324KB
stdin
4
2 6 8 14
1
1 2
stdout
6