USACO 2017 January Silver Division, Cow Dance

Problem Statement

After several months of rehearsal, the cows are just about ready to put on their annual dance performance; this year they are performing the famous bovine ballet "Cowpelia". The only aspect of the show that remains to be determined is the size of the stage. A stage of size KK can support KK cows dancing simultaneously. The NN cows in the herd (1≤N≤10,0001≤N≤10,000) are conveniently numbered 1…N1…N in the order in which they must appear in the dance. Each cow ii plans to dance for a specific duration of time d(i)d(i). Initially, cows 1…K1…K appear on stage and start dancing. When the first of these cows completes her part, she leaves the stage and cow K+1K+1 immediately starts dancing, and so on, so there are always KK cows dancing (until the end of the show, when we start to run out of cows). The show ends when the last cow completes her dancing part, at time TT.

Clearly, the larger the value of KK, the smaller the value of TT. Since the show cannot last too long, you are given as input an upper bound TmaxTmax specifying the largest possible value of TT. Subject to this constraint, please determine the smallest possible value of KK.

INPUT FORMAT (file cowdance.in):

The first line of input contains NN and TmaxTmax, where TmaxTmax is an integer of value at most 1 million. The next NN lines give the durations d(1)…d(N)d(1)…d(N) of the dancing parts for cows 1…N1…N. Each d(i)d(i) value is an integer in the range 1…100,0001…100,000.

It is guaranteed that if K=NK=N, the show will finish in time.

OUTPUT FORMAT (file cowdance.out):

Print out the smallest possible value of KK such that the dance performance will take no more than TmaxTmax units of time. SAMPLE INPUT:

5 8 4 7 8 6 4

The Algorithm

Since K=N is definitely a solution, and K is a solution implies K+1 is a solution, it is possible to do a binary search for K. For all values of K, select the median value, test it by simulating K. If it passes, then set the upper bound to be K, else, set the lower bound to be K. Repeat.

This answers the problem with a binary search.