# Minimum Number of Platforms Required for a Railway/Bus Station | Set 2 (Map based approach)

Given arrival and departure times of all trains that reach a railway station, find the minimum number of platforms required for the railway station so that no train waits. We are given two arrays which represent arrival and departure times of trains that stop.

Examples:

```Input:  arr[]  = {9:00,  9:40, 9:50,  11:00, 15:00, 18:00}
dep[]  = {9:10, 12:00, 11:20, 11:30, 19:00, 20:00}
Output: 3
There are at-most three trains at a time
(time between 11:00 to 11:20)
```

## Recommended: Please solve it on “PRACTICE ” first, before moving on to the solution.

We have already discussed its simple and sorting based solutions in below post.
Minimum Number of Platforms Required for a Railway/Bus Station.

In this post, we are inserting all the arrival and departure times in a multimap. The first value of element in multimap tells the arrival/departure time and second value tells whether it’s arrival or departure represented by ‘a’ or ‘d’ respectively.
If its arrival then do increment by 1 otherwise decrease value by 1. If we are taking the input from STDIN then we can directly insert the times in the multimap and no need to store the times in the array.

 `// Program to find minimum number of platforms ` `// required on a railway station ` `#include ` `using` `namespace` `std; ` ` `  `int` `findPlatform(``int` `arr[], ``int` `dep[], ``int` `n) ` `{ ` `    ``// Insert all the times (arr. and dep.) ` `    ``// in the multimap. ` `    ``multimap<``int``, ``char``> order; ` `    ``for` `(``int` `i = 0; i < n; i++) { ` ` `  `        ``// If its arrival then second value ` `        ``// of pair is 'a' else 'd' ` `        ``order.insert(make_pair(arr[i], ``'a'``)); ` `        ``order.insert(make_pair(dep[i], ``'d'``)); ` `    ``} ` ` `  `    ``int` `result = 0; ` `    ``int` `plat_needed = 0; ` ` `  `    ``multimap<``int``, ``char``>::iterator it = order.begin(); ` ` `  `    ``// Start iterating the multimap. ` `    ``for` `(; it != order.end(); it++) { ` ` `  `        ``// If its 'a' then add 1 to plat_needed ` `        ``// else minus 1 from plat_needed. ` `        ``if` `((*it).second == ``'a'``) ` `            ``plat_needed++; ` `        ``else` `            ``plat_needed--; ` ` `  `        ``if` `(plat_needed>result) ` `            ``result = plat_needed; ` `    ``} ` `    ``return` `result; ` `} ` ` `  `// Driver code ` `int` `main() ` `{ ` `    ``int` `arr[] = { 900, 940, 950, 1100, 1500, 1800 }; ` `    ``int` `dep[] = { 910, 1200, 1120, 1130, 1900, 2000 }; ` `    ``int` `n = ``sizeof``(arr) / ``sizeof``(arr); ` `    ``cout << ``"Minimum Number of Platforms Required = "` `         ``<< findPlatform(arr, dep, n); ` `    ``return` `0; ` `} `

Output:

```3
```

This article is contributed by Jatin Goyal. If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

My Personal Notes arrow_drop_up

Article Tags :
Practice Tags :

13

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.