-
-
Save anitainfo/e358afc48ada52bb02d500417ef5fd47 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#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