Algoritmo de Mo: Introdução ao Método

Este artigo apresenta uma introdução prática ao algoritmo de Mo, um método eficiente para resolver conusltas em intervalos com atualizações. Embora o foco inicial fosse abordar variantes avançadas como Mo com rollback, Mo em árvores e Mo bidimensional, a dificuldade em dominá-las levou à decisão de documentar apenas as versões básicas — Mo simp ...

Publicado em 9-16 07:19

Notas de Estudo: Técnicas e Algoritmos em Programação Competitiva

11/4 Conjuntos: Para lidar com $2^k$ conjuntos, onde cada conjunto tem todos os seus subconjuntos marcados, uma abordagem em $O(k2^k)$ é viável. Coloração: Para dois sequências, $a$ monotonicamente crescente e $b$ monotonicamente decrescente, encontrar o mínimo de $\max(a_i, b_i)$ pode ser resolvido eficientemente com busca binária. Placa de C ...

Publicado em 9-12 21:10

Análise Técnica: Problemas Selecionados do Codeforces Round 922

Problema A: Brick Wall Neste problema, temos uma parede de dimensões \(n \times m\) e uma quantidade ilimitada de tijolos de tamanho \(1 \times x\), onde \(x \ge 2\). O objetivo é preencher a parede completamente. A estabilidade da parede é calculada somando-se 1 para cada tijolo colocado horizontalmente e subtraindo-se 1 para cada tijolo na ve ...

Publicado em 9-3 10:25

Soluções do Concurso Codeforces Hello 2024

Soluções do Concurso Codeforces Hello 2024 A. Troca de Carteiras Este problema consiste em determinar o vencdeor de um jogo simples. Dado dois inteiros a e b representando o dinheiro de Alice e Bob respectivamente, Alice vence se a soma for ímpar, caso contrário Bob vence. #include <iostream> using namespace std; int main() { ios_ba ...

Publicado em 8-1 03:34

Diário de Competição NOIP 2023

Reflexões sobre o Desempenho Dia -1: Revisei estruturas de dados como Tabelas de Segmentação (ST), Árvores de Segmento (Segment Tree), KMP e LCA. Infelizmente, nenhum desses tópicos apareceu na prova. Dia 0: Uma nova revisão geral, sentindo uma mistura de confiança e incerteza. Planejei a estratégia para o dia da prova e depois descansei. Dia 1 ...

Publicado em 7-24 09:06

Operações Bitwise, Conversão de Bases e Manipulação de Bits com bitset em C++

O processamento de dados ao nível de bits é uma técnica fundamental em computação de baixo nível e programação competitiva. Compreender como convertre bases numéricas e manipular bits individualmente permite otimizações significativas de memória e performance. Conversão de Decimal para Binário Existem diversas abordagens para convreter um númer ...

Publicado em 7-23 10:56

Análise de Problemas: Universal Cup Stage 5 - Osijek

Neste artigo, exploramos soluções detalhadas para os problemas da 5ª etapa da Universal Cup (Osijek), focando em abordagens algorítmicas avançadas como NTT, Casco Convexo e Programação Dinâmica. D. Distinct Subsequences O desafio consiste em contar quantas subsequências distintas de comprimento k podem ser formadas a partir de uma string binári ...

Publicado em 7-20 12:40

Fevereiro — Semana 3

2025.2.17 A: Sede de Sal As operações que exigem custo adicional são executadas no máximo uma vez. Portanto, existem três cenários. O primeiro é saltar diretamente para a frente e gastar um custo extra para recuar. O segundo é não realizar nenhuma operação com custo adicional; ambos são simples. No primeiro caso, basta consultar o mínimo de pre ...

Publicado em 7-16 04:41

Resolução de Problemas com Busca Binária em C++

Introdução à Busca Binária em Problemas de Programação Competitiva A busca binária é um algoritmo fundamental amplamente utilizado na programação competitiva devido à sua eficiência (complexidade de tempo logarítmica O(log N)). Este artigo explora diversas aplicações da busca binária em problemas comuns, desde a localização de elementos até a c ...

Publicado em 7-13 10:38

Análise pós-concurso do AtCoder Beginner Contest 383

Problema A A solução é uma simulação direta. Não há grandes complicações. int main() { int linhas, colunas; cin >> linhas >> colunas; vector grade(linhas); for (int i = 0; i < linhas; i++) cin >> grade[i]; int contador = 0; for (int i = 0; i < linhas; i++) { for (int j = 0; j < colunas; j++) { if (grade[i ...

Publicado em 7-13 02:36