You are interviewing a large number of applicants for a job. There are three rounds of interviews, and for the first round, each applicant you interview is assigned a unique suitability ranking. These rankings are represented as an unsorted list of N items. Each item in the list is of the form (name, rank), where name is a string representing the applicant's name, and rank is a unique floating-point value ranging from 0 to 100. Once you've completed all the interviews in the first round, you want a quick way of calculating who should move on to the second and final rounds of interviews. The 50% of applicants who received the lowest suitability rankings will not progress any further with the interviews - they will be told they are unsuccessful in their application. The 20% of applicants who received the highest suitability rankings can skip the second round of interviews and instead go straight to the third round. The remaining 30% of applicants should progress to the second round of interviews. Describe an efficient algorithm using Quickselect to determine the names of applicants that you know will be proceeding to the second and third rounds of interviews after completing the first round. Your algorithm should run in O(N) time, and you can assume that you have access to a Quickselect algorithm which runs in O(N) time.