Contar sem fazer dois lookups de hash por item, o tamanho exato de entrada em que Array.Sort para de preservar a ordem, e o heap que C# só ganhou no .NET 6 — que a maioria do código antigo de maratona em C# ainda contorna na mão.
Uma pilha que se recusa a guardar qualquer coisa inútil responde qual é o próximo elemento maior de um array inteiro em uma passada — e a mesma estrutura mede o maior retângulo de um histograma.
Encontrar um valor num array ordenado é a coisa menos útil que a busca binária faz. O padrão que importa busca num espaço de respostas que ninguém nunca construiu, e não precisa de array ordenado nenhum.
Pré-calcule uma vez e responda qualquer pergunta sobre um intervalo em tempo constante — e o truque inverso que quase ninguém ensina, que aplica uma atualização a um intervalo inteiro escrevendo duas células.
Os dois ponteiros andam para o mesmo lado e o espaço entre eles é a resposta. Quatro formatos de janela, mais o truque de contagem que transforma “exatamente K” numa subtração, porque “exatamente K” não dá para deslizar direto.
Cinco padrões que não precisam de memória extra nenhuma — dois inteiros e o array que te deram. Onde cada um se aplica, por que é linear, e a linha do último que todo mundo escreve ao contrário.