fork download
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. const int N = 6;
  5. int A[N][N];
  6.  
  7. // اقرا كويس يرايق السطر الجاي
  8. // sum((i, j) (k, l)) where (k, l) is the bottom right
  9. int sum_range(int i, int j, int k, int l) {
  10. return A[k][l] - A[k][j - 1] - A[i - 1][l] + A[i - 1][j - 1];
  11. }
  12.  
  13. void accumSum2D() {
  14. // المصفوفة الأصلية (1-based indexing)
  15. int input[N][N] = {
  16. {0, 0, 0, 0, 0, 0},
  17. {0, 1, 2, 2, 4, 1},
  18. {0, 3, 4, 1, 5, 2},
  19. {0, 2, 3, 3, 2, 4},
  20. {0, 4, 1, 5, 4, 6},
  21. {0, 6, 3, 2, 1, 3},
  22. };
  23.  
  24. // نسخ input إلى A
  25. for (int i = 0; i < N; i++)
  26. for (int j = 0; j < N; j++)
  27. A[i][j] = input[i][j];
  28.  
  29. // -----------------------
  30. // Step 1: تجميع الصفوف
  31. // -----------------------
  32. for (int i = 1; i < N; i++)
  33. for (int j = 1; j < N; j++)
  34. A[i][j] += A[i][j - 1];
  35.  
  36. /*
  37.   A بعد جمع الصفوف:
  38.   [0, 0, 0, 0, 0, 0]
  39.   [0, 1, 3, 5, 9, 10]
  40.   [0, 3, 7, 8, 13, 15]
  41.   [0, 2, 5, 8, 10, 14]
  42.   [0, 4, 5, 10, 14, 20]
  43.   [0, 6, 9, 11, 12, 15]
  44.   */
  45.  
  46. // -----------------------
  47. // Step 2: تجميع الأعمدة
  48. // -----------------------
  49. for (int j = 1; j < N; j++)
  50. for (int i = 1; i < N; i++)
  51. A[i][j] += A[i - 1][j];
  52.  
  53. /*
  54.   A بعد جمع الأعمدة (المصفوفة التجميعية النهائية):
  55.   [0, 0, 0, 0, 0, 0]
  56.   [0, 1, 3, 5, 9, 10]
  57.   [0, 4, 10, 13, 22, 25]
  58.   [0, 6, 15, 21, 32, 39]
  59.   [0, 10, 20, 31, 46, 59]
  60.   [0, 16, 29, 42, 58, 74]
  61.   */
  62.  
  63. // -----------------------
  64. // Step 3: حساب مجموع المستطيل من (2,3) إلى (3,5)
  65. // -----------------------
  66.  
  67. // المنطقة:
  68. // [1, 5, 2]
  69. // [3, 2, 4]
  70. // المجموع = 1 + 5 + 2 + 3 + 2 + 4 = 17
  71.  
  72. int result = sum_range(2, 3, 3, 5); // = 39 - 15 - 10 + 3 = 17 ✅
  73.  
  74. cout << result << "\n"; // الناتج النهائي: 17
  75. }
  76.  
  77. int main() {
  78. accumSum2D();
  79. return 0;
  80. }
  81.  
Success #stdin #stdout 0s 5328KB
stdin
Standard input is empty
stdout
17