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

C++-এ কি-সহ পারমিউটেশন কুয়েরি প্রসেস করুন


মান লিজিয়ে queries নামক একটি অ্যারে আছে যার এলিমেন্টগুলো ১ থেকে m পর্যন্ত পূর্ণসংখ্যা। আমাদের সব কুয়েরি প্রসেস করতে হবে rules অনুযায়ী:

  • শुरুর সময় পারমিউটেশন P=[1,2,3,...,m]
  • প্রতি i-তে, queries[i]-র পজিশন P-এ খুঁজে বের করুন (ইন্ডেক্স ০ থেকে) এবং সেটিকে P-এর শুরুতে নিয়ে আসুন।

দেওয়া কুয়েরিগুলোর ফলাফল ধারণকারী একটি অ্যারে রিটার্ন করতে হবে।

যেমন queries = [3,1,2,1], m = 5 হলে আউটপুট [2,1,2,1], কারণ:

  • i=0: queries[0]=3, P=[1,2,3,4,5], 3-এর পজিশন ২, P=[3,1,2,4,5]
  • i=1: queries[1]=1, P=[3,1,2,4,5], 1-এর পজিশন ১, P=[1,3,2,4,5]
  • i=2: queries[2]=2, P=[1,3,2,4,5], 2-এর পজিশন ২, P=[2,1,3,4,5]
  • i=3: queries[3]=1, P=[2,1,3,4,5], 1-এর পজিশন ১, P=[1,2,3,4,5]
  • শেষে ফলাফল অ্যারে [2,1,2,1]

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

  • ret অ্যারে এবং v অ্যারে সংজ্ঞায়িত করুন
  • i=0 থেকে m-1 পর্যন্ত v-এ i+1 পুশ করুন
  • প্রতিটি x ইন q-এ:
    • pos := -1, temp অ্যারে সংজ্ঞায়িত করুন
    • i=0 থেকে v.size()-1 পর্যন্ত যদি v[i]==x, pos=i, ব্রেক
    • temp-র শুরুতে v[pos] ইনসার্ট করুন
    • i=0 থেকে v.size()-1 পর্যন্ত যদি i!=pos, temp-এ v[i] পুশ করুন
    • v := temp, ret-এ pos পুশ করুন
  • ret রিটার্ন করুন

উদাহরণ

নিচের ইমপ্লিমেন্টেশন দেখুন:

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

void print_vector(vector<int> v){ 
    cout << "["; 
    for(int i = 0; i 

ইনপুট

{3,1,2,1}, 5

আউটপুট

[2, 1, 2, 1, ]

  1. C++-এ এক্সপ্রেশন ট্রি (Expression Tree) উদাহরণসহ

  2. সি++-এ অ্যারেতে একটি কী (Key) থাকার প্রোবাবিলিটি বের করার প্রোগ্রাম

  3. C++-এ ৩n স্লাইস পিজা (Pizza With 3n Slices)

  4. সি++-এ লেক্সিকোগ্রাফিকালি পরবর্তী পারমিউটেশন (Lexicographically Next Permutation)