Причина появления ошибки ~Segmentation fault (core dumped)~?

Задание:

N школьников из классов А и Б выстроены в ряд. i-й школьник в ряду сказал число с - сколько школьников не с его класса стоят левее в ряду. Вам дан перемешанный массив с. Восстановите любое возможное изначальное расположение учеников.

Формат входных данных

В первой строке находится одно целое число N . Во второй строке находятся N целых чисел - перемешанный массив с

Формат выходных данных

Выведите изначальное расположение учеников в виде строки длины N - состоящей из символов A и B. Гарантируются, что существует хотя бы одна такая строка.

Если есть несколько ответов выведите любое из них

Мой ответ: код незаконченный Пока выводятся изначальное полодение цифр

using namespace std;

int main(){
    int n,sa=0,sb=0,j=0;
    cin >> n;
    int a1[n];
    int a2[n];
    for(int i=0;i<n;i++){
        cin >> a1[i];
    }
    char b[n];
    for(int i=0;i<n;i++){
       if(a1[i]==0){
           a2[j]=a1[i];
           j++;
           sb++;
       }
    }
    while(sa+sb!=n){
    for(int i=0;i<n;i++){
        if(a1[i]==sb){
            a2[j]=a1[i];
            j++;
            sa++;
        }
    }
    for(int i=0;i<n;i++){
        if(a1[i]==sa){
            a2[j]=a1[i];
            j++;
            sb++;
        }
    }
    }
    for(int i=0;i<n;i++){
        cout << a2[i];
    }
    return 0;
}  ``` 


В некоторых случаях выводится ошибка: 
Segmentation fault (core dumped)


Например:
5
0 0 2 1 3

Ответы (0 шт):