ধরুন আমাদের কাছে সংখ্যার একটি তালিকা আছে যাকে nums বলা হয় এবং ক্রিয়াকলাপের একটি তালিকা রয়েছে। এখানে প্রতিটি অপারেশনের তিনটি ক্ষেত্র রয়েছে [L, R, X], এটি নির্দেশ করে যে আমাদের সূচক L থেকে R (অন্তর্ভুক্ত) সমস্ত উপাদান X দ্বারা বৃদ্ধি করা উচিত। আমাদের সমস্ত ক্রিয়াকলাপ প্রয়োগ করতে হবে এবং চূড়ান্ত তালিকা ফেরত দিতে হবে৷
সুতরাং, যদি ইনপুটটি সংখ্যার মত হয় =[8, 4, 2, -9, 4] অপারেশন =[ [0, 0, 3], [1, 3, 2], [2, 3, 5]], তাহলে আউটপুট হবে [11, 6, 9, -2, 4], যেমন প্রাথমিক তালিকা ছিল [8, 4, 2, -9, 4]।
- প্রথম অপারেশন [0, 0, 3] সম্পাদনের তালিকাটি হবে [11, 4, 2, -9, 4]৷
- প্রথম অপারেশন [1, 3, 2] সম্পাদনের তালিকাটি হবে [11, 6, 4, -7, 4]৷
- প্রথম অপারেশন [2, 3, 5] সম্পাদনের তালিকাটি হবে [11, 6, 9, -2, 4]।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
- ইভেন্ট :=একটি নতুন তালিকা
- অপারেশনে প্রতিটি (l, r, inc) এর জন্য, করুন
- ইভেন্টের শেষে (l, inc) সন্নিবেশ করুন
- ইভেন্টের শেষে সন্নিবেশ করুন (r + 1, -inc)
- তালিকা ইভেন্টগুলি সাজান
- inc :=0, ptr :=0
- আমি 0 থেকে সংখ্যার আকারের মধ্যে,
- করুন
- যদিও ptr <ঘটনা এবং ইভেন্টের আকার[ptr, 0] i, do
- এর মতো
- inc :=inc + ঘটনা[ptr, 1]
- ptr :=ptr + 1
- সংখ্যা[i] :=সংখ্যা[i] + inc
- যদিও ptr <ঘটনা এবং ইভেন্টের আকার[ptr, 0] i, do
- রিটার্ন সংখ্যা
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
উদাহরণ
শ্রেণির সমাধান:def solve(self, nums, operations):events =[] l, r, inc এর জন্য অপারেশনে:events.append((l, inc)) events.append((r + 1, -inc )) events.sort() inc =0 ptr =0 in range(len(nums) এর জন্য):যখন ptrইনপুট
<প্রে>[1,2,3,4,5,6,7,8,9,10], 3
আউটপুট
[11, 6, 9, -2, 4]