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

C++-এ অ্যারেতে x

একটি পূর্ণসংখ্যা অ্যারে দেওয়া আছে। অ্যারেতে থেকে বনে যোড়া (x,y) যাতে x < y সত্য হয়, তাদের সংখ্যা গণনা করুন। (অর্ডার ম্যানে: (x,y) এবং (y,x) আলাদা)।

উদাহরণ

ইনপুট: [2, 4, 3, 1]

সকল যোড়া: ৪×৪=১৬টি

x (2,4), (2,3), (1,2), (3,4), (1,4), (1,3) = 6টি

সিম্পল O(n²) পদ্ধতি


int X_Less_Y(int arr[], int size) {
    int count = 0;
    for (int i = 0; i < size; i++)
        for (int j = 0; j < size; j++)
            if (arr[i] < arr[j]) count++;
    return count;
}

অপ্টিমাইজড O(n log n) পদ্ধতি

  1. অ্যারে সর্ট করুন।
  2. প্রতিটি উপাদানের জন্য, তার চেয়ে বড় উপাদানগুলো বাইনারি সার্চ/দুই পয়েন্টার দিয়ে খুঁজুন।
  3. অথবা: সর্টেড অ্যারেতে প্রতিটি উপাদানের জন্য তার ডানপাশে কতটি আছে তা যোগ করুন।

C++ বাস্তবায়ন (অপ্টিমাইজড)


#include 
using namespace std;

long long countPairs(vector& arr) {
    sort(arr.begin(), arr.end());
    long long ans = 0;
    int n = arr.size();
    for (int i = 0; i < n; i++) {
        // arr[i] < arr[j] হলে j > i এবং arr[j] > arr[i]
        auto it = upper_bound(arr.begin() + i + 1, arr.end(), arr[i]);
        ans += arr.end() - it;
    }
    return ans;
}

int main() {
    vector v = {2, 4, 3, 1};
    cout << countPairs(v); // 6
    return 0;
}
  1. C++-এ অ্যারেতে ভাগযোগ্য জোড়া গণনা

  2. C++-এ একটি অ্যারে থেকে x^y > y^x শর্ত পূরণকারী (x, y) জোড়ার সংখ্যা খুঁজুন

  3. অ্যারেতে a+b+c=d হওয়া সর্বোচ্চ d বের করা (C++)

  4. C++ ব্যবহার করে অ্যারেতে a % b = k সেটি করার সব জোড়া (a, b) বের করা