ধরুন একটি নির্বাচনে, i-th ভোট ব্যক্তিদের জন্য দেওয়া হয়েছিল [i] সময়ে [i]। এখন, আমাদের নিম্নলিখিত ক্যোয়ারী ফাংশনটি বাস্তবায়ন করতে হবে:TopVotedCandidate.q(int t) এটি সেই ব্যক্তির সংখ্যা খুঁজে পাবে যেটি নির্বাচনে নেতৃত্ব দিয়েছিল। টি সময়ে দেওয়া ভোটগুলি আমাদের প্রশ্নের জন্য গণনা করা হবে। যদি টাই হয়, সাম্প্রতিক ভোট (আবদ্ধ প্রার্থীদের মধ্যে) জয়ী হয়৷
৷তাই আমরা যদি TopVotedCandidate([0,1,1,0,0,1,0], [0,5,10,15,20,25,30]) দিয়ে এটি শুরু করি, তাহলে q() এর মতো কল করুন:q( 3), q(12), q(25), q(15), q(24), q(8), তারপর প্রতিটি কলের জন্য ফলাফল হবে [0, 1, 1, 0, 0, 1] q()। কারণ 3 এ, ভোট [0], এবং 0 এগিয়ে রয়েছে। সময় 12, ভোট হয় [0,1,1], এবং এখানে 1 এগিয়ে আছে। 25-এ, ভোটগুলি হল [0,1,1,0,0,1], এবং 1 এগিয়ে রয়েছে (যেমন বন্ধনগুলি সাম্প্রতিক ভোটে যায়৷) এটি 15, 24 এবং অবশেষে 8 সময়ে আরও 3টি প্রশ্নের জন্য চলতে থাকে৷
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
-
দুটি মানচিত্র m এবং গণনা তৈরি করুন
-
ইনিশিয়ালাইজারে, নিম্নলিখিত কাজগুলি করুন
-
নেতৃত্ব :=-1
-
আমি 0 থেকে টাইম অ্যারের আকারের মধ্যে
-
x :=বার[i]
-
গণনার মান [ব্যক্তিদের[i]] 1 দ্বারা বৃদ্ধি করুন
-
যদি গণনা [লীড] <=গণনা[ব্যক্তি[i]] হয়, তাহলে নেতৃত্ব :=ব্যক্তি [i] এবং m[x] :=নেতৃত্ব অন্যথায় m[x] :=নেতৃত্ব
-
-
q() পদ্ধতিটি হবে
এর মত-
m-এ t-এর উপরের সীমা কমিয়ে আনুন এবং সংশ্লিষ্ট মান ফেরত দিন
-
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
উদাহরণ
#include <bits/stdc++.h> using namespace std; class TopVotedCandidate { public: map <int, int> m; map <int, int> count; TopVotedCandidate(vector<int>& persons, vector<int>& times) { int lead = -1; for(int i = 0; i < times.size(); i++){ int x = times[i]; count[persons[i]]++; if(count[lead] <= count[persons[i]]){ lead = persons[i]; m[x] = lead; }else{ m[x] = lead; } } } int q(int t) { return ((--m.upper_bound(t)) -> second); } }; main(){ vector<int> v1 = {0,1,1,0,0,1,0}, v2 = {0,5,10,15,20,25,30}; TopVotedCandidate ob(v1, v2); cout << (ob.q(3)) << endl; cout << (ob.q(12)) << endl; cout << (ob.q(25)) << endl; cout << (ob.q(15)) << endl; cout << (ob.q(24)) << endl; cout << (ob.q(8)) << endl; }
ইনপুট
Initialize the class using [0,1,1,0,0,1,0] and [0,5,10,15,20,25,30]. Call q() method like below: q(3) q(12) q(25) q(15) q(24) q(8)
আউটপুট
0 1 1 0 0 1