কম্পিউটার টিউটোরিয়াল

C++-এ ম্যাক্সিমাম সাবঅ্যারে সাম মডুলো m


একটি অ্যারে (সাইজ n) এবং একটি ইন্টিজার m দেওয়া আছে। সব সাবঅ্যারের সাম মডুলো m-এর ম্যাক্সিমাম মান বের করতে হবে।

উদাহরণ: array = {4, 9, 2}, m = 6 -> আউটপুট: ৫

ব্যাখ্যা: সাবঅ্যারে ও তাদের রিমেইন্ডার: {4}: 4%6=4, {9}: 9%6=3, {2}: 2%6=2 {4,9}: 13%6=1, {9,2}: 11%6=5, {4,9,2}: 15%6=3 ম্যাক্সিমাম = ৫

সমাধান: প্রিফিক্স সাম মডুলো অ্যারে কম্পিউট করব। সেট (set) ব্যবহার করে প্রতিটি ইনডেক্সে maxSum = max(maxSum, (prefix_i - prefix_j + m) % m) ক্যালকুলেট করব।

উদাহরণ

#include<bits/stdc++.h>
using namespace std;

int calcMaxSum(int arr[], int n, int m) {
    int x, prefix = 0, maxSumMod = 0;
    set<int> sums;
    sums.insert(0);
    for (int i = 0; i < n; i++){
        prefix = (prefix + arr[i]) % m;
        maxSumMod = max(maxSumMod, prefix);
        auto it = sums.lower_bound(prefix+1);
        if (it != sums.end())
            maxSumMod = max(maxSumMod, prefix - (*it) + m );
        sums.insert(prefix);
    }
    return maxSumMod;
}

int main() {
    int arr[] = {4, 9, 2};
    int n = sizeof(arr)/sizeof(arr[0]);
    int m = 5;
    cout << "Maximum subarray sum modulo " << m << " is " << calcMaxSum(arr, n, m) << endl;
    return 0;
}

আউটপুট

Maximum subarray sum modulo 5 is 4

  1. সর্বোচ্চ k সংখ্যক এলিমেন্টের চিহ্ন ফ্লিপ করে সর্বোচ্চ সাবঅ্যারে যোগফল C++-এ

  2. C++-এ অ্যারেতে সর্বোচ্চ ইকুইলিব্রিয়াম যোগফল

  3. স্ট্রিক্টলি ইনক্রিজিং সাব-অ্যারের সর্বোচ্চ যোগফল বের করা C++-তে

  4. C++-এ ডিভাইড অ্যান্ড কঙ্কর ব্যবহার করে मैक्सিমাম সাবঅ্যারে সম বের করা