0Pricing
Competitive Programming Academy · درس

جمع أي نطاق بالطرح

الإجابة عن range[l..r] في زمن ثابت

جمع أي نطاق بالطرح درس مجاني في Competitive Programming Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Competitive Programming Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Competitive Programming Academy 4 دروس في المجموع.

الفائدة الحقيقية

كان بناء مصفوفة المجموع التراكمي خطوةً تمهيدية. أما الآن فتأتي الفائدة الرائعة: الإجابة عن مجموع أي نطاق باستخدام عملية طرح واحدة. ⚡

الفكرة الأساسية

مجموع النطاق ليس إلا مجموعًا كبيرًا ناقص مجموع أصغر. يؤدي طرح قيمتين من المجموع التراكمي إلى إلغاء كل ما يقع خارج نطاقك بوضوح.

الصيغة

لجمع العناصر من l إلى r، اطرح prefix[l] من prefix[r + 1]. تعمل هذه الصيغة الواحدة مع أي نطاق.

range_sum = prefix[r + 1] - prefix[l]

لماذا تنجح

يحتوي prefix[r + 1] على كل شيء حتى r، بينما يحتوي prefix[l] على كل ما قبل l. ويترك الفرق الجزء الأوسط بالضبط.

مثال محلول

بالنسبة إلى [3, 1, 4] يكون المجموع التراكمي هو [0, 3, 4, 8]. ولجمع الفهرسين 1 و2، اطرح 3 من 8 لتحصل على 5. وهذا يساوي 1 زائد 4.

استعلامات بزمن ثابت

كل استعلام هو عملية طرح واحدة فقط، لذا يُنفَّذ في O(1). وتستغرق ألفة استعلام الزمن نفسه لكل استعلام الذي يستغرقه استعلام واحد.

انتبه إلى خطأ الواحد

الخطأ الأكثر شيوعًا هو الفهرس عند الطرف الأعلى. مع وجود الصفر في البداية، تستخدم دائمًا prefix[r + 1]، وليس prefix[r]. انتبه إلى ذلك الحد.

شامل أم حصري

حدّد مبكرًا ما إذا كان r مشمولًا. تتعامل هذه الصيغة مع النطاق باعتباره شاملًا لكل من l وr، وهذا ما تتوقعه معظم مسائل المسابقات.

ضعها في دالة

تحافظ دالة مساعدة صغيرة على وضوح منطقك وتضع فهارسك في مكان واحد. اعتمد على هذه الدالة المساعدة بدلًا من كتابة العمليات الحسابية ضمنيًا.

def query(l, r):
    return prefix[r + 1] - prefix[l]

تعامل مع المصفوفة كاملة

لجمع المصفوفة بأكملها، استخدم l مساويًا لـ 0 وr مساويًا لـ n ناقص 1. تعطيك الصيغة prefix[n]، أي الإجمالي الكلي.

متى تتألق هذه الطريقة

كلما طرحت المسألة أسئلة كثيرة عن مجاميع نطاقات في مصفوفة ثابتة، تحوّل المجاميع التراكمية حلقةً زمنها O(n) لكل استعلام إلى إجابات فورية.

تحقق سريع

تريد حساب مجموع الفهارس من l إلى r، مع تضمين الطرفين.

مراجعة

يمكنك الآن الإجابة عن أي مجموع نطاق في O(1) باستخدام prefix[r + 1] ناقص prefix[l]. انتبه إلى الإزاحة الناتجة عن الصفر في البداية، وستتجنب الأخطاء. ✅

الأسئلة الشائعة

هل درس «جمع أي نطاق بالطرح» مجاني؟

نعم — نص درس «جمع أي نطاق بالطرح» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Competitive Programming Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Competitive Programming Academy 4 دروس في المجموع.

ماذا ستتعلم في «جمع أي نطاق بالطرح»؟

الإجابة عن range[l..r] في زمن ثابت تتمرن على Competitive Programming Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Competitive Programming Academy؟

لا تُشترط خبرة سابقة. Competitive Programming Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.

كم من الوقت يستغرق درس «جمع أي نطاق بالطرح»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Competitive Programming Academy هذا؟

نعم. كل درس في Competitive Programming Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. إنشاء مصفوفة المجاميع السابقة
  2. جمع أي نطاق بالطرح
  3. عدّ المصفوفات الفرعية ذات المجموع المستهدف
  4. مصفوفات الفروق لتحديثات النطاق
← العودة إلى Competitive Programming Academy