https://coderun.yandex.ru/problem/segments-with-min-mex Средняя

Решение

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()
}