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

C++-এ সর্বোচ্চ ইভেন্ট অনুষ্ঠান করা যায় কতগুলো


ধরুন events[i] = [startDayi, endDayi] এমন একটি ইভেন্ট অ্যারে আছে। প্রতিটি ইভেন্ট i startDayi-তে শুরু হয় এবং endDayi-তে শেষ হয়। আমরা ইভেন্ট i যেকোনো দিন d-এ অনুষ্ঠান করতে পারি যেখানে d startDayi এবং endDayi-এর মধ্যে (দুটোই ইনক্লুসিভ)। একসাথে একাধিক ইভেন্ট অনুষ্ঠান করা যাবে না। সর্বোচ্চ কতগুলো ইভেন্ট অনুষ্ঠান করা যায় তা বের করতে হবে। ইনপুট [[1,4], [4,4], [2,2], [3,4], [1,1]] হলে আউটপুট ৪, কারণ অনুষ্ঠান করা যায় [1,1], [2,2], [3,4], [4,4] — মোট চারটি।

সমাধানের ধাপগুলো:

  • n := ইভেন্ট সংখ্যা, ইভেন্ট লিস্টকে স্টার্ট ডেট বেসিসে সোর্ট করুন, ret := 0, itr := 0

  • ম্যাক্স-হিপ বেসড প্রায়োরিটি কিউ pq তৈরি করুন

  • i = 1 থেকে 100000 পর্যন্ত লুপ চালান

    • যখন itr < n এবং events[itr][0] == i

      • events[itr][1] pq-তে পশ করুন

      • itr ১ বাড়ান

    • যখন pq খালি নয় এবং pq-এর টপ < i

      • pq থেকে পপ করুন

    • যদি pq খালি নয়, তবে pq থেকে পপ করুন এবং ret ১ বাড়ান

  • ret রিটার্ন করুন

উদাহরণ (C++)

নিচের ইমপ্লিমেন্টেশন দেখুন ভালো বুঝতে −

#include <bits/stdc++.h> using namespace std; class Solution { public:    static bool cmp(vector <int>& a, vector <int>& b){       return a[0] < b[0];    }    int maxEvents(vector<vector<int>>& events) {       int n = events.size();       sort(events.begin(), events.end(), cmp);       int ret = 0;       int itr = 0;       priority_queue <int, vector <int>, greater <int>> pq;       for(int i = 1; i <= 1e5; i++){          while(itr < n && events[itr][0] == i){             pq.push(events[itr][1]);             itr++;          }          while(!pq.empty() && pq.top() < i) pq.pop();          if(!pq.empty()){             pq.pop();             ret++;          }       }       return ret;    } }; main(){    vector<vector<int>> v = {{1,4},{4,4},{2,2},{3,4},{1,1}};    Solution ob;    cout << (ob.maxEvents(v)); }

ইনপুট

[[1,4],[4,4],[2,2],[3,4],[1,1]]

আউটপুট

4
  1. C++-এ সেভেন সেগমেন্ট ডিসপ্লেতে N সেগমেন্ট দিয়ে প্রদর্শনযোগ্য সর্বোচ্চ সংখ্যা

  2. C++-এ দেওয়া লাইন সেগমেন্ট দিয়ে সর্বোচ্চ সমান্তরালচতুর্ভুজ বানানো

  3. C++-এ k আপডেট দিয়ে ম্যাক্সিমাম এলিমেন্ট সমান করা

  4. C++-এ কণকোণী সমদ্বিবাহু ত্রিভুজে ফিট হতে পারা ম্যাক্সিমাম বর্গের সংখ্যা