✍️ مزیت اصلی جمع پیشوندی وقتی دیده میشود که روی یک داده ثابت، پرسشهای زیادی داریم. اگر برای هر پرسش دوباره اعضای بازه را جمع بزنیم، بخشهای مشترک را بارها میخوانیم. با جدول پیشوندی، یک بار ورودی را میبینیم و هر پرسش بعدی فقط یک تفریق دارد. هزینه کلی از جنس طول ورودی بهاضافه تعداد پرسشهاست.
مثلاً برای [2, 6, -1, 3] و پرسشهای [[0,1],[1,3],[2,2]] جوابها [8,8,-1] هستند. ترتیب پاسخ باید ترتیب خود پرسشها باشد؛ حتی اگر یک بازه دوبار تکرار شود، دو پاسخ لازم داریم. هر پرسش دو شاخص بسته دارد، نه یک شاخص و یک طول.
تابع را مستقل بنویس؛ به توابع درسهای قبلی دسترسی خودکار ندارد. جدول را یک بار داخل همان تابع بساز و سپس همه پرسشها را پاسخ بده. ورودی خالی فقط با پرسشهای خالی داده میشود و خروجی هم خالی است. خطای رایج، ساختن دوباره جدول درون حلقه پرسشها یا مرتب کردن پرسشها برای راحتی است؛ اولی کار اضافی دارد و دومی ترتیب قراردادی نتیجه را خراب میکند.
تابع آماده course_check فقط برای ارزیابی است: تابع اصلی را صدا میزند و حفظ ورودی را بررسی میکند. آن را تغییر نده؛ پاسخ تو همان تابع خواستهشده است.
فعالیت شما
تابع range_sums(nums,queries) فهرست اعداد صحیح و فهرست زوجهای [left,right] میگیرد. هر بازه معتبر و بسته است: 0<=left<=right<len(nums). پاسخ عددی هر بازه را به ترتیب queries در فهرست برگردان؛ پرسش تکراری جواب تکراری دارد. queries خالی خروجی []؛ اگر nums خالی است queries هم خالی خواهد بود. بازه تکعضوی و left=0 مجازند. range_sums([2,6,-1,3],[[0,1],[2,2]])=[8,-1]. هیچ ورودی را تغییر نده؛ جدول را یک بار بساز. تابع آماده course_check فقط برای ارزیابی است: تابع اصلی را صدا میزند و حفظ ورودی را بررسی میکند. آن را تغییر نده؛ پاسخ تو همان تابع خواستهشده است.