1
class NumberContainers {3
map<int, int> indexToNumber; // stores number corresponding to an index.4
map<int, set<int>> numberToIndex; // stores all the indexes corresponding to a number.7
void change(int index, int number) {8
if (!indexToNumber.count(index)) { // if there is no number at the given index.9
numberToIndex[number].insert(index); // store index corresponding to the given number10
indexToNumber[index] = number; // store number corresponding to the index.11
} else { // Update both map.13
int num = indexToNumber[index]; // number at given index currently.16
numberToIndex[num].erase(index);17
if (numberToIndex[num].empty()) numberToIndex.erase(num);19
// insert the new number at the given index and store the index20
// corresponding to that number.21
numberToIndex[number].insert(index);22
indexToNumber[index] = number;26
int find(int number) {27
if (!numberToIndex.count(number)) return -1;28
// returning first element in the set as it will be the smallest index30
return *numberToIndex[number].begin();