A linguagem mais utilizada em programação competitiva é C++, principalmente por ser bem eficiente e possuir uma biblioteca pronta com vários algoritmos e estruturas de dados (a STL). Se você está familiarizado com C, não deve sentir tanta dificuldade para ganhar experiência com C++.


Estrutura básica de um código

A utilização de C++ com a STL terá uma estrutura similar à vista em C (com include, int main() e tudo mais). Um exemplo de entrada e saída de valores de um vetor pode ser visto a seguir:

#include <iostream> // biblioteca de entrada e saída
#include <vector> // vector

using namespace std; // explico mais ou menos depois

int main() {
   int n;
   cin >> n;
   vector<int> a(n);
   for (int i = 0; i < n; i++) {
      cin >> a[i];
   }

   for (int i = 0; i < n; i++) {
      cout << a[i];
   }
}

Como visto, um termo novo que apareceu é o namespace, utilizado para definir funções em algum contexto específico.

Toda função da STL é inserida em um namespace denominado std. Assim, caso você queira utilizar algo da STL (por exemplo, um vector), terá que fazer algo como: std::vector<int> v;

Para eliminar essa necessidade de colocar std:: na frente de tudo que a gente for utilizar da STL, é possível simplificar e inserir este using namespace std; no início do código. Assim, quando a gente falar simplesmente vector<int>, o compilador já sabe que a gente está falando do vector da STL.


A biblioteca bits/stdc++.h

Esta biblioteca é muito utilizada por já incluir várias outras bibliotecas padrões. Por exemplo, em vez de ter que ficar fazendo um include por biblioteca para usar as coisas da STL, basta apenas incluir essa bits, que vem tudo junto.

#include <bits/stdc++.h>
using namespace std;

int main() { ... }

Observação: infelizmente, algumas plataformas não suportam a sua utilização, e nesses casos você terá que incluir cada biblioteca separadamente. Caso contrário, é bem provável que consiga utilizá-la. Também é possível (por exemplo, se estiver em um ambiente MacOS) que essa biblioteca não esteja presente (nesse caso, é preciso baixar o .h separadamente e incluir na pasta).


cin, cout e o "fast i/o"

Caso você queira usar "cin" e "cout" para ler e imprimir (em vez de "scanf" e "printf"), é importante tomar alguns cuidados adicionais.

Quando a entrada e a saída possuem muitos valores para serem tratados, a utilização de cin e cout pode ser lenta, por causa de sincronizações que são feitas entre as streams padrões de C (stdin, stdout, ...) com as streams de C++ (cin, cout, ...). Para contornar isso, pode-se adicionar a seguinte linha:

#include <bits/stdc++.h>
using namespace std;

int main() {
   ios::sync_with_stdio(false); cin.tie(nullptr);
   ...
}

Isso pode salvar um TLE. Porém, tome cuidado, e não fique misturando as funções de C (printf, scanf) com as funções de C++ (cin, cout), pois a ordem pode ficar toda bagunçada. Só escolher um e usar até o final.