ধরুন আমাদের 1 এবং m-এর মধ্যে ধনাত্মক পূর্ণসংখ্যার একটি অ্যারে কোয়েরি আছে, আমাদের নিম্নলিখিত নিয়ম অনুসারে সমস্ত প্রশ্ন, প্রশ্ন [i] প্রক্রিয়া করতে হবে (i=0 থেকে n, n হল প্রশ্নের আকার - 1) পি>
-
শুরুতে, আমাদের P=[1,2,3,...,m] পারমুটেশন আছে।
-
বর্তমান i-এর জন্য, P-এ প্রশ্নগুলির অবস্থান খুঁজুন (0 থেকে সূচীকরণ) এবং তারপর এটিকে স্থানান্তর P-এর শুরুতে সরান।
প্রদত্ত প্রশ্নের জন্য ফলাফল সম্বলিত একটি অ্যারে খুঁজে বের করতে হবে।
সুতরাং, যদি ইনপুটটি queries =[3,1,2,1], m =5 এর মত হয়, তাহলে আউটপুট হবে [2,1,2,1], এর কারণ হল ক্যোয়ারীগুলি অনুসরণ করে প্রক্রিয়া করা হয় -পি>
-
সূচক i =0:queries[i]=3, P=[1,2,3,4,5], P-এ 3-এর অবস্থান হল 2, তারপর 3-কে P-এর শুরুতে সরান যার ফলে P=[3, 1,2,4,5]।
-
সূচক i =1:queries[i]=1, P=[3,1,2,4,5], P-এ 1-এর অবস্থান হল 1, তারপর 1-কে P-এর শুরুতে সরান যার ফলে P=[1, ৩,২,৪,৫]।
-
সূচক i =2:queries[i]=2, P=[1,3,2,4,5], P-এ 2-এর অবস্থান হল 2, তারপর 2-কে P-এর শুরুতে সরান যার ফলে P=[2, 1,3,4,5]।
-
সূচক i =3:queries[i]=1, P=[2,1,3,4,5], P-এ 1-এর অবস্থান হল 1, তারপর 1-কে P-এর শুরুতে সরান যার ফলে P=[1, 2,3,4,5]।
-
অবশেষে, ফলাফল ধারণকারী অ্যারে হল [2,1,2,1]।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
-
একটি অ্যারে ret সংজ্ঞায়িত করুন
-
একটি অ্যারে v
সংজ্ঞায়িত করুন -
আরম্ভ করার জন্য i :=0, যখন i − m, আপডেট করুন (i 1 দ্বারা বাড়ান), করুন −
-
v
এর শেষে i + 1 ঢোকান
-
-
প্রতিটি মানের জন্য x q, করুন
-
অবস্থান :=-1
-
একটি অ্যারের তাপমাত্রা সংজ্ঞায়িত করুন
-
আরম্ভ করার জন্য i :=0, যখন i
-
যদি v[i] x এর মত হয়, তাহলে −
-
pos :=i
-
লুপ থেকে বেরিয়ে আসুন
-
-
-
সূচক v[pos>
-এ temp-এর প্রথম উপাদান প্রবেশ করান -
আরম্ভ করার জন্য i :=0, যখন i
-
যদি আমি pos এর মতই হয়, তাহলে -
-
নিম্নলিখিত অংশ উপেক্ষা করুন, পরবর্তী পুনরাবৃত্তি এড়িয়ে যান
-
-
টেম্পের শেষে v[i] ঢোকান
-
-
v :=temp
-
ret এর শেষে pos সন্নিবেশ করুন
-
-
রিটার্ন রিটার্ন
উদাহরণ
আরো ভালোভাবে বোঝার জন্য নিচের বাস্তবায়নটি দেখি -
#include <bits/stdc++.h>
using namespace std;
void print_vector(vector<int> v){
cout << "[";
for(int i = 0; i<v.size(); i++){
cout << v[i] << ", ";
}
cout << "]"<<endl;
}
class Solution {
public:
vector<int> processQueries(vector<int>& q, int m) {
vector<int> ret;
vector<int> v;
for (int i = 0; i < m; i++)
v.push_back(i + 1);
for (int x : q) {
int pos = -1;
vector<int> temp;
for (int i = 0; i < v.size(); i++) {
if (v[i] == x) {
pos = i;
break;
}
}
temp.insert(temp.begin(), v[pos]);
for (int i = 0; i < v.size(); i++) {
if (i == pos)
continue;
temp.push_back(v[i]);
}
v = temp;
ret.push_back(pos);
}
return ret;
}
};
main(){
Solution ob;
vector<int> v = {3,1,2,1};
print_vector(ob.processQueries(v, 5));
} ইনপুট
{3,1,2,1}, 5 আউটপুট
[2, 1, 2, 1, ]