কম্পিউটার

C++ এ ইনক্রিমেন্ট অপারেশন সহ একটি স্ট্যাক ডিজাইন করুন


ধরুন আমরা একটি স্ট্যাক ডিজাইন করতে চাই যা নিম্নলিখিত ক্রিয়াকলাপগুলিকে সমর্থন করে৷

  • CustomStack(int maxSize) এটি ম্যাক্সসাইজ দিয়ে অবজেক্টকে আরম্ভ করে যা স্ট্যাকের সর্বোচ্চ সংখ্যক উপাদান বা স্ট্যাকটি ম্যাক্সসাইজে পৌঁছে গেলে কিছুই করবেন না।

  • void push(int x) এটি স্ট্যাকের শীর্ষে x সন্নিবেশ করায় যদি স্ট্যাকটি সর্বাধিক আকারে না পৌঁছায়।

  • int pop() এটি স্ট্যাকের উপরের অংশটি মুছে দেয় বা ফেরত দেয় যদি স্ট্যাকটি খালি থাকে।

  • void inc(int k, int val) এটি স্ট্যাকের নীচের k উপাদানগুলিকে ভ্যাল দ্বারা বৃদ্ধি করে। স্ট্যাকের মধ্যে k-এর কম উপাদান থাকলে, স্ট্যাকের সমস্ত উপাদান বৃদ্ধি করুন।

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

  • দুটি অ্যারে st এবং inc সংজ্ঞায়িত করুন এবং একটি পূর্ণসংখ্যা টাইপ ডেটা ক্যাপ তৈরি করুন

  • ইনিশিয়ালাইজারে, ক্যাপ সেট করুন :=N এবং সেট inc :=N + 10 আকারের একটি নতুন অ্যারে

  • পুশ(এক্স) পদ্ধতির জন্য, যদি স্ট্যাকের আকার ক্যাপ না হয়, তাহলে st-এ x ঢোকান।

  • পপ() অপারেশন −

    এর মত হবে
  • যদি st খালি হয়, তাহলে -1

    ফেরত দিন
  • অন্যথায়

    • স্ট্যাকের শীর্ষ :=স্ট্যাকের শীর্ষ + inc[স্ট্যাকের শীর্ষ সূচক]

    • স্ট্যাকের যদি কিছু উপাদান থাকে, তাহলে inc[st - 2 এর আকার] inc[st-1 এর আকার]

    • inc[s - 1 এর আকার] :=0

    • x :=st

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

  • inc() পদ্ধতিটি নিম্নরূপ কাজ করবে -

  • k 1 দ্বারা হ্রাস করুন

  • k :=k এর মিনিমাম এবং st এর সাইজ – 1

  • k <0 হলে, ফেরত দিন

  • ভ্যাল দ্বারা inc[k] বাড়ান।

উদাহরণ (C++)

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

#include <bits/stdc++.h>
using namespace std;
class CustomStack {
public:
   vector <int> st;
   vector <int> inc;
   int cap;
   CustomStack(int N) {
      cap = N;
      inc = vector <int>(N + 10);
   }
   void push(int x) {
      if(st.size() == cap) return;
      st.push_back(x);
   }
   int pop() {
      if(st.empty()) return -1;
      else{
         st.back() += inc[st.size() - 1];
         if(st.size() - 1 > 0 ){
            inc[st.size() - 2] += inc[st.size() - 1];
         }
         inc[st.size() - 1] = 0;
         int x = st.back();
         st.pop_back();
         return x;
      }
   }
   void increment(int k, int val) {
      k--;
      k = min(k, (int)st.size() - 1);
      if(k < 0) return;
      inc[k] += val;
   }
};
main(){
   CustomStack ob(3);
   ob.push(1);
   ob.push(2);
   cout << ob.pop() << endl;
   ob.push(2);
   ob.push(3);
   ob.push(4);
   ob.increment(5, 100);
   ob.increment(2, 100);
   cout << ob.pop() << endl;
   cout << ob.pop() << endl;
   cout << ob.pop() << endl;
   cout << ob.pop() << endl;
}

ইনপুট

See the main() in the program

আউটপুট

2
103
202
201
-1

  1. C++ এ একটি লিডারবোর্ড ডিজাইন করুন

  2. C++ এ একটি সংখ্যা হিসাবে 0 সহ 'd' সংখ্যার ধনাত্মক পূর্ণসংখ্যা গণনা করুন

  3. C++ এ যোগফল S সহ মৌলিক P এর পরে মৌলিক সংখ্যা

  4. C++ এ একটি ম্যাট্রিক্সে বিজোড় মান সহ কক্ষ