Решение
import java.io.BufferedReader
import java.io.BufferedWriter
import java.io.InputStreamReader
import java.io.OutputStreamWriter
fun main(args: Array<String>) {
val reader = BufferedReader(InputStreamReader(System.`in`))
val writer = BufferedWriter(OutputStreamWriter(System.out))
val n = reader.readLine().toInt()
val arr = reader.readLine().split(" ").map { it.toInt() }
// Проверяем, все ли элементы равны 1
var allOnes = true
for (num in arr) {
if (num != 1) {
allOnes = false
break
}
}
var result = 0L
if (allOnes) {
// Если все элементы равны 1, то для каждого подотрезка MEX = 2,
// а их общее количество: n*(n+1)/2.
result = n.toLong() * (n + 1) / 2
} else {
// Если встречается хотя бы один элемент, отличный от 1, минимальный MEX = 1.
// Подотрезок имеет MEX = 1, если он не содержит число 1.
var count = 0L // длина текущего блока без единиц
for (num in arr) {
if (num == 1) {
// При встрече 1 фиксируем накопленный блок
result += count * (count + 1) / 2
count = 0L
} else {
count++
}
}
// Если последний блок в конце массива не завершился числом 1
result += count * (count + 1) / 2
}
writer.write(result.toString())
writer.newLine()
writer.flush()
writer.close()
reader.close()
}