Problem p01225 (C++) — buggy submission, verdict: Runtime Error

#include <algorithm>
#include <deque>
#include <iostream>
#include <map>
#include <vector>
using namespace std;

int main() {
  int T;
  deque<int> R, B, G;
  int inx[10];
  char iny;
  map<int, int> Ri, Bi, Gi;

  cin >> T;
  while (T-- > 0) {
    R.clear();
    B.clear();
    G.clear();
    Ri.clear();
    Bi.clear();
    Gi.clear();
    for (int i = 0; i < 9; i++) {
      cin >> inx[i];
    }
    for (int j = 0; j < 9; j++) {
      cin >> iny;
      if (iny == 'R') {
        R.push_back(inx[j]);
        Ri[inx[j]]++;
      } else if (iny == 'B') {
        B.push_back(inx[j]);
        Bi[inx[j]]++;
      } else if (iny == 'G') {
        G.push_back(inx[j]);
        Gi[inx[j]]++;
      }
    }

    sort(R.begin(), R.end());
    sort(B.begin(), B.end());
    sort(G.begin(), G.end());

    int tp;
    for (int i = 0; i < 3; i++) {
      if (R.size() < 3)
        break;
      tp = R.front();
      if ((Ri[tp + 1] > 0 && Ri[tp + 2] > 0)) {
        R.pop_front();
        deque<int>::iterator Rit = R.begin();
        while (Rit != R.end()) {
          if (tp + 1 == (*Rit)) {
            R.erase(Rit);
            break;
          }
          Rit++;
        }
        Rit = R.begin();
        while (Rit != R.end()) {
          if (tp + 2 == (*Rit)) {
            R.erase(Rit);
            break;
          }
          Rit++;
        }
        Ri.clear();
        for (int i = 0; i < R.size(); i++) {
          Ri[R[i]]++;
        }
      } else if (Ri[tp] >= 3) {
        R.pop_front();
        R.pop_front();
        R.pop_front();
        for (int i = 0; i < R.size(); i++) {
          Ri[R[i]]++;
        }
      }
    }

    for (int i = 0; i < 3; i++) {
      if (B.size() < 3)
        break;
      tp = B.front();
      if ((Bi[tp + 1] > 0 && Bi[tp + 2] > 0)) {
        B.pop_front();
        deque<int>::iterator Bit = B.begin();
        while (Bit != B.end()) {
          if (tp + 1 == (*Bit)) {
            B.erase(Bit);
            break;
          }
          Bit++;
        }
        Bit = B.begin();
        while (Bit != B.end()) {
          if (tp + 2 == (*Bit)) {
            B.erase(Bit);
            break;
          }
          Bit++;
        }
        Bi.clear();
        for (int i = 0; i < B.size(); i++) {
          Bi[B[i]]++;
        }
      } else if (Bi[tp] >= 3) {
        B.pop_front();
        B.pop_front();
        B.pop_front();
        for (int i = 0; i < B.size(); i++) {
          Bi[B[i]]++;
        }
      }
    }

    for (int i = 0; i < 3; i++) {
      if (G.size() < 3)
        break;
      tp = G.front();
      if ((Gi[tp + 1] > 0 && Gi[tp + 2] > 0)) {
        G.pop_front();
        deque<int>::iterator Git = G.begin();
        while (Git != G.end()) {
          if (tp + 1 == (*Git)) {
            G.erase(Git);
            break;
          }
          Git++;
        }
        Git = G.begin();
        while (Git != G.end()) {
          if (tp + 2 == (*Git)) {
            G.erase(Git);
            break;
          }
          Git++;
        }
        Gi.clear();
        for (int i = 0; i < G.size(); i++) {
          Gi[G[i]]++;
        }
      } else if (Gi[tp] >= 3) {
        G.pop_front();
        G.pop_front();
        G.pop_front();
        for (int i = 0; i < G.size(); i++) {
          Gi[G[i]]++;
        }
      }
    }

    if (R.empty() && G.empty() && B.empty())
      cout << "1" << endl;
    else
      cout << "0" << endl;
  }
  return 0;
}

Error: 0

Fixed submission:

#include <algorithm>
#include <deque>
#include <iostream>
#include <map>
#include <vector>
using namespace std;

int main() {
  int T;
  deque<int> R, B, G;
  int inx[10];
  char iny;
  map<int, int> Ri, Bi, Gi;

  cin >> T;
  while (T-- > 0) {
    R.clear();
    B.clear();
    G.clear();
    Ri.clear();
    Bi.clear();
    Gi.clear();
    for (int i = 0; i < 9; i++) {
      cin >> inx[i];
    }
    for (int j = 0; j < 9; j++) {
      cin >> iny;
      if (iny == 'R') {
        R.push_back(inx[j]);
        Ri[inx[j]]++;
      } else if (iny == 'B') {
        B.push_back(inx[j]);
        Bi[inx[j]]++;
      } else if (iny == 'G') {
        G.push_back(inx[j]);
        Gi[inx[j]]++;
      }
    }

    sort(R.begin(), R.end());
    sort(B.begin(), B.end());
    sort(G.begin(), G.end());

    int tp;
    for (int i = 0; i < 3; i++) {
      tp = R.front();
      if ((Ri[tp + 1] > 0 && Ri[tp + 2] > 0)) {
        R.pop_front();
        deque<int>::iterator Rit = R.begin();
        while (Rit != R.end()) {
          if (tp + 1 == (*Rit)) {
            R.erase(Rit);
            break;
          }
          Rit++;
        }
        Rit = R.begin();
        while (Rit != R.end()) {
          if (tp + 2 == (*Rit)) {
            R.erase(Rit);
            break;
          }
          Rit++;
        }
        Ri.clear();
        for (int i = 0; i < R.size(); i++) {
          Ri[R[i]]++;
        }
      } else if (Ri[tp] >= 3) {
        R.pop_front();
        R.pop_front();
        R.pop_front();
        for (int i = 0; i < R.size(); i++) {
          Ri[R[i]]++;
        }
      }
    }

    for (int i = 0; i < 3; i++) {
      tp = B.front();
      if ((Bi[tp + 1] > 0 && Bi[tp + 2] > 0)) {
        B.pop_front();
        deque<int>::iterator Bit = B.begin();
        while (Bit != B.end()) {
          if (tp + 1 == (*Bit)) {
            B.erase(Bit);
            break;
          }
          Bit++;
        }
        Bit = B.begin();
        while (Bit != B.end()) {
          if (tp + 2 == (*Bit)) {
            B.erase(Bit);
            break;
          }
          Bit++;
        }
        Bi.clear();
        for (int i = 0; i < B.size(); i++) {
          Bi[B[i]]++;
        }
      } else if (Bi[tp] >= 3) {
        B.pop_front();
        B.pop_front();
        B.pop_front();
        for (int i = 0; i < B.size(); i++) {
          Bi[B[i]]++;
        }
      }
    }

    for (int i = 0; i < 3; i++) {
      tp = G.front();
      if ((Gi[tp + 1] > 0 && Gi[tp + 2] > 0)) {
        G.pop_front();
        deque<int>::iterator Git = G.begin();
        while (Git != G.end()) {
          if (tp + 1 == (*Git)) {
            G.erase(Git);
            break;
          }
          Git++;
        }
        Git = G.begin();
        while (Git != G.end()) {
          if (tp + 2 == (*Git)) {
            G.erase(Git);
            break;
          }
          Git++;
        }
        Gi.clear();
        for (int i = 0; i < G.size(); i++) {
          Gi[G[i]]++;
        }
      } else if (Gi[tp] >= 3) {
        G.pop_front();
        G.pop_front();
        G.pop_front();
        for (int i = 0; i < G.size(); i++) {
          Gi[G[i]]++;
        }
      }
    }

    if (R.empty() && G.empty() && B.empty())
      cout << "1" << endl;
    else
      cout << "0" << endl;
  }
  return 0;
}