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

#pragma GCC optimize(2)
#pragma GCC optimize(3)
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = 2e5 + 10;
#define fi first
#define se second
#define pb push_back
#define wzh(x) cerr << #x << '=' << x << endl;
int r, c, k;
struct uzi {
  int r, c, v;
  bool operator<(const uzi &t) const {
    if (r == t.r)
      return c < t.c;
    return r < t.r;
  }
} p[N];
int ok[3333];
LL dp[3333][3333];
LL st[3333][4];
int main() {
  ios::sync_with_stdio(false);
  cin >> r >> c >> k;
  for (int i = 1; i <= k; i++) {
    cin >> p[i].r >> p[i].c >> p[i].v;
  }
  sort(p + 1, p + 1 + k);
  // for(int i=1;i<=k;i++)cout<<p[i].r<<' '<<p[i].c<<' '<<p[i].v<<endl;
  int l = 1;
  for (int i = 1; i <= r; i++) {
    while (l <= k && p[l].r < i)
      l++;
    for (int j = 1; j <= c; j++) {
      dp[i][j] = max(dp[i][j - 1], dp[i - 1][j]);
      for (int ne = 0; ne <= 3; ne++)
        st[j][ne] = 0;
    }
    if (l > k || p[l].r != i) {
      continue;
    }
    int ra = l;
    for (int j = 1; j <= c; j++)
      ok[j] = 0;
    while (ra + 1 <= k && p[ra + 1].r == i)
      ra++;
    //  cout<<i<<' '<<l<<' '<<ra<<endl;
    for (int j = l; j <= ra; j++) {
      ok[p[j].c] = p[j].v;
      // cout<<i<<' '<<p[j].c<<' '<<p[j].v<<endl;
    }
    for (int j = 1; j <= c; j++) {
      if (ok[j]) {
        st[j][0] = max(st[j - 1][0], dp[i - 1][j]);
        for (int ne = 1; ne <= 3; ne++) {
          st[j][ne] = max(st[j - 1][ne - 1] + ok[j], st[j - 1][ne]);
          st[j][ne] = max(st[j][ne], dp[i - 1][j] + ok[j]);
          st[j][ne] = max(st[j][ne], st[j][ne - 1]);
        }
      } else {
        for (int ne = 0; ne <= 3; ne++) {
          st[j][ne] = max(dp[i - 1][j], st[j - 1][ne]);
          if (ne)
            st[j][ne] = max(st[j][ne], st[j][ne - 1]);
        }
      }
      for (int ne = 0; ne <= 3; ne++) {
        dp[i][j] = max(dp[i][j], st[j][ne]);
      }
      dp[i][j] = max(dp[i][j], dp[i][j - 1]);

      //   cout<<"get->"<<i<<' '<<j<<' '<<dp[i][j]<<endl;
    }
    l = ra + 1;
  }
  cout << dp[r][c];
  return 0;
}

Error: WA

Fixed submission:

#pragma GCC optimize(2)
#pragma GCC optimize(3)
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = 2e5 + 10;
#define fi first
#define se second
#define pb push_back
#define wzh(x) cerr << #x << '=' << x << endl;
int r, c, k;
struct uzi {
  int r, c, v;
  bool operator<(const uzi &t) const {
    if (r == t.r)
      return c < t.c;
    return r < t.r;
  }
} p[N];
int ok[3333];
LL dp[3333][3333];
LL st[3333][4];
int main() {
  ios::sync_with_stdio(false);
  cin >> r >> c >> k;
  for (int i = 1; i <= k; i++) {
    cin >> p[i].r >> p[i].c >> p[i].v;
  }
  sort(p + 1, p + 1 + k);
  int l = 1;
  for (int i = 1; i <= r; i++) {
    while (l <= k && p[l].r < i)
      l++;
    for (int j = 1; j <= c; j++) {
      dp[i][j] = max(dp[i][j - 1], dp[i - 1][j]);
      for (int ne = 0; ne <= 3; ne++)
        st[j][ne] = 0;
    }
    if (p[l].r != i) {
      l++;
      continue;
    }
    int ra = l;
    for (int j = 1; j <= c; j++)
      ok[j] = 0;
    while (ra + 1 <= k && p[ra + 1].r == i)
      ra++;

    //  cout<<i<<' '<<l<<' '<<ra<<endl;
    for (int j = l; j <= ra; j++) {
      ok[p[j].c] = p[j].v;
    }
    for (int j = 1; j <= c; j++) {
      if (ok[j]) {
        for (int ne = 1; ne <= 3; ne++) {
          st[j][ne] = max(st[j - 1][ne - 1] + ok[j], st[j - 1][ne]);
          st[j][ne] = max(st[j][ne], dp[i - 1][j] + ok[j]);
        }
        st[j][0] = max(st[j - 1][0], dp[i - 1][j]);
      } else {
        for (int ne = 0; ne <= 3; ne++) {
          st[j][ne] = max(dp[i - 1][j], st[j - 1][ne]);
        }
      }
      for (int ne = 0; ne <= 3; ne++) {
        dp[i][j] = max(dp[i][j], st[j][ne]);
      }
    }
    l = ra + 1;
  }
  cout << dp[r][c];
  return 0;
}