Untitled
unknown
c_cpp
10 months ago
2.8 kB
17
Indexable
class MovieRentingSystem {
public:
// Available movies
unordered_map<int,priority_queue< pair<int,int>, vector<pair<int,int>>, greater<pair<int,int>>>>
availableMovies;
// Checking weather a particular movie on the rent or not
set<pair<int,int>> checkRented ;
// To fin price efficiently
unordered_map<int, unordered_map<int,int>> price;
// heap to track prices
priority_queue< vector<int>, vector<vector<int>>, greater<vector<int>>> recentMovies ;
MovieRentingSystem(int n, vector<vector<int>>& entries) {
for(int i=0 ; i<entries.size();i++){
int shop = entries[i][0] ;
int movie = entries[i][1] ;
int p = entries[i][2] ;
availableMovies[movie].push({p,shop}) ;
price[movie][shop]= p;
}
}
vector<int> search(int movie) {
vector<int> ans ;
vector<pair<int,int>> rollback;
int len =0 ;
while(!availableMovies[movie].empty() && len<5){
int shop = availableMovies[movie].top().second ;
if(checkRented.find({shop,movie})==checkRented.end()){
len++ ;
ans.push_back(shop) ;
rollback.push_back(availableMovies[movie].top()) ;
}
availableMovies[movie].pop();
}
for (auto &p : rollback) availableMovies[movie].push(p);
return ans ;
}
void rent(int shop, int movie) {
if(checkRented.find({shop,movie})==checkRented.end()){
recentMovies.push({price[movie][shop], shop, movie}) ;
checkRented.insert({shop,movie}) ;
}
}
void drop(int shop, int movie) {
checkRented.erase({shop,movie}) ;
}
vector<vector<int>> report() {
int len = 0 ;
vector<vector<int>> rollback;
vector<vector<int>> ans ;
while(!recentMovies.empty() && len<5){
auto top = recentMovies.top() ;
int shop = top[1] ;
int movie = top[2] ;
int p = top[0] ;
if(checkRented.find({shop,movie})!=checkRented.end()){
len++ ;
ans.push_back({shop,movie}) ;
rollback.push_back(top) ;
}
recentMovies.pop() ;
}
for (auto &p : rollback) recentMovies.push(p);
return ans ;
}
};
/**
* Your MovieRentingSystem object will be instantiated and called as such:
* MovieRentingSystem* obj = new MovieRentingSystem(n, entries);
* vector<int> param_1 = obj->search(movie);
* obj->rent(shop,movie);
* obj->drop(shop,movie);
* vector<vector<int>> param_4 = obj->report();
*/Editor is loading...
Leave a Comment