কম্পিউটার

C++ এ সমস্ত বিজোড় দৈর্ঘ্যের সাবলিস্টের মধ্যকার যোগফল খুঁজে বের করার প্রোগ্রাম


ধরুন আমাদের কাছে সংখ্যা বলা সংখ্যার একটি তালিকা আছে, আমাদের প্রদত্ত তালিকার প্রতিটি বিজোড়-দৈর্ঘ্যের সাবলিস্টের মধ্যকগুলির যোগফল খুঁজে বের করতে হবে৷

সুতরাং, যদি ইনপুটটি সংখ্যার মত হয় =[2, 4, 6, 3], তাহলে আউটপুট হবে 23, যেমন বিজোড় দৈর্ঘ্যের সাবলিস্টগুলি হল − [2], [4], [6], [3], [2, 4, 6], [4, 6, 3], সুতরাং মধ্যকার যোগফল হল 2 + ​​4 + 6 + 3 + 4 + 4 =23

এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -

  • ret :=0

  • আরম্ভ করার জন্য i :=0, যখন i <সংখ্যার আকার, আপডেট (i 1 দ্বারা বৃদ্ধি), −

    • que_max

      নামক অগ্রাধিকার সারি সংজ্ঞায়িত করুন
    • que_min

      নামে আরেকটি অগ্রাধিকার সারি সংজ্ঞায়িত করুন
    • j শুরু করার জন্য :=i, যখন j <সংখ্যার আকার, আপডেট করুন (j 1 দ্বারা বৃদ্ধি করুন), করুন −

      • que_max

        -এ nums[j] ঢোকান
      • যখন que_max>=2 এর আকার, −

        করুন
        • que_min

          -এ que_max-এর শীর্ষ উপাদান সন্নিবেশ করান
        • que_max

          থেকে শীর্ষ উপাদান মুছুন
      • যখন (que_min এর আকার 0 নয় এবং que_max এর শীর্ষ উপাদান> que_min এর শীর্ষ উপাদান), করুন −

        • a :=que_max এর শীর্ষ উপাদান, que_max থেকে শীর্ষ উপাদান মুছুন

        • b :=que_min এর শীর্ষ উপাদান, que_min থেকে শীর্ষ উপাদান মুছুন

        • que_max

          -এ b সন্নিবেশ করান
        • que_min

          -এ একটি ঢোকান
      • যদি i mod 2 j mod 2 এর মত হয়, তাহলে −

        • ret :=ret + que_max

          এর শীর্ষ উপাদান
  • রিটার্ন রিটার্ন

আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -

উদাহরণ

#include <bits/stdc++.h>
using namespace std;
int solve(vector<int>& nums) {
   int ret = 0;
   for (int i = 0; i < nums.size(); i++) {
      priority_queue<int> que_max;
      priority_queue<int, vector<int>, greater<int>> que_min;
      for (int j = i; j < nums.size(); j++) {
         que_max.push(nums[j]);
         while (que_max.size() - que_min.size() >= 2) {
            que_min.push(que_max.top());
            que_max.pop();
         }
         while (que_min.size() && que_max.top() > que_min.top()) {
            int a = que_max.top();
            que_max.pop();
            int b = que_min.top();
            que_min.pop();
            que_max.push(b);
            que_min.push(a);
         }
         if (i % 2 == j % 2) {
            ret += que_max.top();
         }
      }
   }
   return ret;
}
int main(){
   vector<int> v = {2, 4, 6, 3};
   cout << solve(v);
}

ইনপুট

{2, 4, 6, 3}

আউটপুট

23

  1. একটি সংখ্যার বিজোড় গুণনীয়কের যোগফল খুঁজে বের করার জন্য C++ প্রোগ্রাম

  2. একটি দ্বিঘাত সমীকরণের সমস্ত মূল খুঁজে পেতে C++ প্রোগ্রাম

  3. পাইথনে সমস্ত বিজোড় দৈর্ঘ্যের সাবয়ারের যোগফল খুঁজে বের করার প্রোগ্রাম

  4. পাইথনে সমস্ত সংলগ্ন সাবলিস্টের যোগফলের যোগফল খুঁজে বের করার জন্য প্রোগ্রাম