| Сообщение от Aetae | 
	| Если даты уже отсортированы | 
	
тогда можно ещё прикинуть, сколько примерно записей бывает за месяц, и в цикле прибавлять не i++, а i += k. Если набижали на новый месяц, то ищем начало нового месяца, идя от прошлой записи и прибавляя 1 (или идя назад). 
Если в среднем 
M сообщений за месяц, то взяв k = sqrt(M), получим O(N / sqrt(M)) вместо (O(N))
при маленьких М, конечно, толку от этого не будет.. Хотя надо заметить, что при малых M и записей всего очень мало (потому как за 100 лет было всего 1200 месяцев, и оптимизировать нечего). Т.е. М, судя по всему, здоровенное.