TOPIC
Rum time error como resolver, Run time error how
dalves38 asked 3 years ago
#include <stdio.h>
#include <stdlib.h>
typedef struct elemento
{
int valor, chave;
} Elemento;
typedef struct map
{
Elemento **dados;
int *tamanho;
} Map;
Map *cria(int tam);
int insere(Map *mp, int valor, int i);
int libera(Map *mp, int tam);
int main(int argc, char** argv)
{
int tam, teste;
int numero, indice;
int i;
while(scanf("%d %d", &tam, &teste) != EOF)
{
Map *matriz = cria(tam);
for(i = 0; i < tam; i++)
{
scanf("%d", &numero);
insere(matriz, numero, i + 1);
}
for(i = 0; i < teste; i++)
{
scanf("%d %d", &indice, &numero);
if(indice <= matriz->tamanho[numero])
{
printf("%d\n", matriz->dados[numero][indice - 1].chave);
}
else
{
printf("0\n");
}
}
libera(matriz, tam);
}
return 0;
}
Map *cria(int tam)
{
Map *mp = malloc(sizeof(Map));
if(!mp) return NULL;
mp->tamanho = calloc(tam, sizeof(int));
mp->dados = malloc(sizeof(Elemento) * tam);
int i;
for(i = 0; i < tam; i++)
{
mp->dados[i] = malloc(sizeof(Elemento) * tam);
}
return mp;
}
int insere(Map *mp, int valor, int i)
{
if(mp->tamanho[valor] == 0)
{
int size = mp->tamanho[valor];
mp->dados[valor][size].valor = valor;
mp->dados[valor][size].chave = i;
mp->tamanho[valor]++;
}
else
{
int size = mp->tamanho[valor];
mp->dados[valor][size].valor = valor;
mp->dados[valor][size].chave = i;
mp->tamanho[valor]++;
}
return 1;
}
int libera(Map *mp, int tam)
{
int i;
for(i = 0; i < tam; i++)
{
free(mp->dados[i]);
}
free(mp->tamanho);
free(mp->dados);
free(mp);
return 1;
}