Об этом лучше спросить именно там (там обитает гораздо больше увлекающихся олимпиадами, чем тут)
Но спрашивать что-то очень узкое, потому что такой же вопрос там много раз задавали (можно найти и почитать ответы)
Нужно помещать строки в самобалансирующееся дерево (АВЛ, красно-чёрное и т.п.). В C++ реализовано в STL-контейнерах set и muliset. Сложность добавления будет - логарифм