Skip to content

Instantly share code, notes, and snippets.

@anitainfo
Last active September 3, 2020 03:26
Show Gist options
  • Save anitainfo/e358afc48ada52bb02d500417ef5fd47 to your computer and use it in GitHub Desktop.
Save anitainfo/e358afc48ada52bb02d500417ef5fd47 to your computer and use it in GitHub Desktop.
#include<bits/stdc++.h> //biblioteca utilizada
using namespace std;
const int MAXN=10000000; //define MAXN como 10000000
int marc[MAXN]; //declaro um vetor de marcação de tamanho 'MAXN'
int main()
{
int N,Q,X,C,num; //declaração de variáveis
scanf("%d %d", &N, &Q); //leitura da 1º linha de entrada
int v[N+1]; //declaro um vetor de tamanho 'N'+1
for(int i=1; i<=N; i++) //loop para ler toda a fita
{
scanf("%d", &v[i]); //leitura dos valores da fita
if(v[i-1]!=v[i])marc[v[i]]++; //se o valor casinha da fita atual é diferente do valor da anterior, soma-se 1 ao vetor de marcação dessa cor (valor da casinha)
}
for(int i=1; i<=Q; i++) //loop para ler todas as "perguntas"
{
scanf("%d", &num); //lê o 1º número da pergunta (1 ou 2)
if(num==1) //se for 1
{
scanf("%d %d", &X, &C); //lê 'X' e 'C'
if(v[X+1]==C && v[X-1]==C)marc[C]--; //se os dois vizinhos da casinha 'X' são iguais a 'C', subtrai 1 na qntd de intervalos de 'C' (união de dois intervalos distintos)
if(v[X+1]!=C && v[X-1]!=C)marc[C]++; //se os dois vizinhos da casinha 'X' são diferentes de 'C', soma 1 na qntd de intervalos de 'C' (número isolado = novo intervalo)
if(v[X+1]==v[X] && v[X-1]==v[X])marc[v[X]]++; //se os dois vizinhos da casinha 'X' são iguais à casinha 'X', soma 1 na qntd de intervalos do valor da casinha 'X' (separação de um intervalo contínuo = 2 intervalos separados)
else if(v[X+1]!=v[X] && v[X-1]!=v[X])marc[v[X]]--; //se os dois vizinhos da casinha 'X' são diferentes da casinha 'X', subtrai 1 na qntd de intervalos do valor da casinha 'X' (intervalo de um número isolado = intervalo some)
v[X]=C; //casinha 'X' assume o valor de 'C'
}
else if(num==2) //se for 2
{
scanf("%d", &C); //lê o 'C'
printf("%d\n", marc[C]); //imprime a resposta para essa cor/número
}
}
return 0; //retorna a 0
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment