##### Canadian Computing Competition: 2015 Stage 1, Senior #3

For your birthday, you were given an airport.

The airport has gates, numbered from to . planes arrive at the airport, one after another. You are to assign the plane to permanently dock at any gate (), at which no previous plane has docked. As soon as a plane cannot dock at any gate, the airport is shut down and no future planes are allowed to arrive.

In order to keep the person who gave you the airport happy, you would like to maximize the number of planes starting from the beginning that can all dock at different gates.

#### Input Specification

The first line of input contains (), the number of gates at the airport.

The second line of input contains (), the number of planes which will land.

The next lines contain one integer , (), such that the plane must dock at some gate from to , inclusive.

Note that for at least of the marks for this question, and .

#### Output Specification

Output the maximum number of planes that can land starting from the beginning.

#### Sample Input 1

```
4
3
4
1
1
```

#### Output for Sample Input 1

`2`

#### Explanation of Output for Sample Input 1

The first plane can go anywhere, but it is best to not put it into Gate . Notice that planes and both want to dock into Gate , so plane is unable to dock.

#### Sample Input 2

```
4
6
2
2
3
3
4
4
```

#### Output for Sample Input 2

`3`

#### Explanation of Output for Sample Input 2

The first two planes will dock in gates and (in any order). The third plane must dock at Gate . Thus, the fourth plane cannot dock anywhere, and the airport is closed, even though plane would have been able to dock.

## Comments

Can anyone tell me why std::lower_bound TLEs, but set::lower_bound ACs? I thought they both ran in O(logN)

`set::lower_bound`

is a specialized lower_bound method for`std::set`

that runs in time.`std::lower_bound`

only has this guarantee for random access iterators, which`std::set`

does not have. For non random access iterators such as with`std::set`

, it takes time on average (based on http://www.cplusplus.com/reference/algorithm/lower_bound/).La-da-da-da-dah You know I'm mobbin' with the T.L.E.

Even the O(n ^ 2) Algorithm worked as long as you code it in C

This comment is hidden due to too much negative feedback. Click here to view it.

I still passed lol.

Implementing a TreeSet will hold back your worries about TLE.

How come my 15/30 submission did not get TLE.

This comment is hidden due to too much negative feedback. Click here to view it.

I think Java is missing in the allowed languages.

Thanks for letting us know, it's been added now.

Why is there no judge for this problem?

Is it advised not to use ArrayList as it is slower than a regular array to optimize the speed of the program? Is the difference between an array and an ArrayList not large enough to slow down the program so drastically that the time limit would not be exceeded? If not, then it must be the algorithm that is at fault then, correct? And if so, any tips on how to optimize my algorithm?

Your algorithm is wrong, one possible approach is to use binary search and a set to reduce to run time complexity to

Not sure what the set equivalent is in java though.

TIL that .

The original CEMC test data is now a 50% subtask (5 points). New cases, worth the other 50%, are added to award to the truly correct solutions.

All submissions have been rejudged.

Note: For of the CEMC cases, and . Those cases are worth of the total points.