0Pricing
Competitive Programming Academy · درس

مصفوفات الفروق لتحديثات النطاق

تطبيق عمليات الإضافة إلى النطاق بسرعة

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

اقلب المشكلة

أجابت المجاميع التراكمية عن استعلامات النطاق بسرعة. أما مصفوفة الفروق فتعكس الفكرة لتطبيق تحديثات نطاق كثيرة بسرعة. 🔁

الطريقة البطيئة

تكلف إضافة قيمة إلى كل عنصر في نطاق، مع تكرار ذلك مرات كثيرة، O(n) لكل تحديث. ومع q من التحديثات، تتضخم هذه الكلفة بشدة.

خزّن التغييرات

بدلًا من تعديل كل خلية، سجّل فقط موضع بدء التغيير وموضع انتهائه. علّم الحافتين، لا الوسط.

ما الذي تخزّنه مصفوفة الفروق

تخزّن مصفوفة الفروق الفجوة بين كل عنصر والعنصر الذي يسبقه. ويؤدي تعديل فجوة واحدة إلى إزاحة مقطع كامل لاحقًا.

حيلة العلامتين

لإضافة v من l إلى r، أضف v عند الفهرس l واطرح v عند الفهرس r + 1. يغطي هذان التعديلان النطاق بأكمله.

diff[l] += v
diff[r + 1] -= v

لماذا نطرح

تشغّل الإضافة عند l التغيير، بينما توقفه عملية الطرح عند r + 1. وبذلك تحدّدان التحديث في نطاق واحد، فتجعلانه متوقفًا بعده.

طبّق كل التحديثات بكلفة قليلة

كل تحديث هو عمليتا كتابة فقط في المصفوفة، لذا تستغرق q من التحديثات O(q) إجمالًا. وتؤجَّل العمليات الثقيلة إلى النهاية.

استعد المصفوفة النهائية

بعد وضع جميع العلامات، احسب مجموعًا تراكميًا لمصفوفة الفروق. ويعيد هذا المرور الواحد بناء كل قيمة نهائية.

for i in range(1, n):
    diff[i] += diff[i - 1]

حدّد الحجم مع خانة حارسة

اجعل المصفوفة أطول بخلية واحدة حتى لا يتجاوز r + 1 نهايتها. وتتجنب خانة الحراسة الإضافية أخطاء الفهارس.

الكلفة الإجمالية

تنفق O(q) لوضع علامات التحديثات، ثم تمرّ مرورًا واحدًا زمنه O(n) لإعادة البناء. وتكون الكلفة المجمعة أقل بكثير من O(n مضروبًا في q) بالطريقة الساذجة.

متى تتفوق

تتألق مصفوفات الفروق في حسابات الحجوزات ورسوم الطرق، وفي أي مسألة تتضمن عمليات كثيرة من إضافة إلى نطاق ثم قراءة نهائية واحدة.

تحقق سريع

تضيف v إلى كل عنصر من الفهرس l إلى الفهرس r.

مراجعة

يمكنك تجميع تحديثات النطاق باستخدام مصفوفة فروق: علّم l وr + 1، ثم احسب المجموع التراكمي مرة واحدة لإعادة البناء. تحديثات سريعة وقراءة واحدة. ✅

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

هل درس «مصفوفات الفروق لتحديثات النطاق» مجاني؟

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

ماذا ستتعلم في «مصفوفات الفروق لتحديثات النطاق»؟

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

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

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

كم من الوقت يستغرق درس «مصفوفات الفروق لتحديثات النطاق»؟

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

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

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

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

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