Решение задачи Туфурама с Codeforces
С пояснением   Просмотров: 962
Всего в сериале n сезонов (пронумерованных от 1 до n), в i-м сезоне a i серий (пронумерованных от 1 до a i). Поликарп считает, что если для некоторой пары чисел x и y ( x < y) существует и серия x сезона y, и серия y сезона x, то для одного из этих запросов поисковик будет выдавать совсем не то, что он искал. Поэтому Поликарп хочет подсчитать количество таких пар. Помогите ему!
Пояснение к задаче
Во-первых, наличие в сезоне более n серий не влияет на ответ, то есть можно сделать a i = min(a i, n).
Для решения данной задачи будем поддерживать следующий инвариант: в момент рассмотрения i-го сезона будем поддерживать все сезоны, в которых ≥ i серий, тогда количество пар (i, y) это просто количество сезонов, номера которых ≤ a i. Один из самых простых способов поддерживать этот инвариант — для каждого количества серий a i сохранить список всех номеров сезонов, имеющих столько серий. Тогда, обработав i-й сезон, достаточно просто удалить все сезоны, в которых ровно i серий.
Поддерживать сезоны и подсчитывать их количество можно поддерживая единицы и нули в BIT.
Однако текущий ответ учитывает каждую пару (x < y) два раза, а также содержит некоторые валидные пары (x, x), поэтому надо сначала удалить из ответа количество пар (x, x) (где a x ≥ x), и потом поделить на два.
Автор: Администратор