Problem p03640 (C++)

Buggy submission (status: Runtime Error):
#include <bits/stdc++.h>
// #include <ext/pb_ds/assoc_container.hpp>
// #include <ext/pb_ds/tree_poizcy.hpp>
typedef long long ll;
#define pb push_back
#define mp make_pair
#define all(a) (a).begin(), (a).end()
#define mem(a, h) memset(a, (h), sizeof(a))
#define fi first
#define se second
#define por(a, b) (((a % MOD) * (b % MOD)) % MOD)
#define forg(i, b, e, c) for (ll i = (ll)b; i < (ll)e; i += c)
#define forr(i, b, e) for (ll i = b; i < e; i++)

using namespace std;
// using namespace __gnu_pbds;
typedef double lldb;
typedef pair<int, int> ii;
typedef pair<double, double> iidb;
typedef pair<int, ii> iii;
typedef vector<ll> vi;
typedef vector<vi> vvi;
typedef vector<ii> vii;
typedef vector<ll> vll;
// typedef
// tree<ii,null_type,less<ii>,rb_tree_tag,tree_order_statistics_node_update>
// ordered_set;
const ll INF = 1e9 + 7;
const double PI = acos(-1);
#define initseg ll new_nodo = (pnodo * 2), mid = (iz + der) / 2;

// mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
#define tam 1010
#define offset 3000
#define ptr nodo *

using namespace std;
int cant[tam];
int marca[tam][tam];
int main() {
  int h, w;
  cin >> h >> w;
  int n;
  cin >> n;
  forr(i, 0, n) { cin >> cant[i]; }
  vector<ii> vect;
  int ini, add;
  forr(i, 0, h) {
    if (i % 2)
      ini = w - 1, add = -1;
    else
      ini = 0, add = 1;
    while (ini >= 0 && ini <= w - 1) {
      vect.pb({i, ini});
      ini += add;
    }
  }
  int pos = 0;
  forr(i, 0, n) {
    while (cant[i]--) {
      marca[vect[pos].fi][vect[pos].se] = i + 1;
      pos++;
    }
  }
  forr(i, 0, h) {
    forr(j, 0, w) cout << marca[i][j] << " ";
    cout << endl;
  }
}

Fixed submission:
#include <bits/stdc++.h>
// #include <ext/pb_ds/assoc_container.hpp>
// #include <ext/pb_ds/tree_poizcy.hpp>
typedef long long ll;
#define pb push_back
#define mp make_pair
#define all(a) (a).begin(), (a).end()
#define mem(a, h) memset(a, (h), sizeof(a))
#define fi first
#define se second
#define por(a, b) (((a % MOD) * (b % MOD)) % MOD)
#define forg(i, b, e, c) for (ll i = (ll)b; i < (ll)e; i += c)
#define forr(i, b, e) for (ll i = b; i < e; i++)

using namespace std;
// using namespace __gnu_pbds;
typedef double lldb;
typedef pair<int, int> ii;
typedef pair<double, double> iidb;
typedef pair<int, ii> iii;
typedef vector<ll> vi;
typedef vector<vi> vvi;
typedef vector<ii> vii;
typedef vector<ll> vll;
// typedef
// tree<ii,null_type,less<ii>,rb_tree_tag,tree_order_statistics_node_update>
// ordered_set;
const ll INF = 1e9 + 7;
const double PI = acos(-1);
#define initseg ll new_nodo = (pnodo * 2), mid = (iz + der) / 2;

// mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
#define tam 1010
#define offset 3000
#define ptr nodo *

using namespace std;
int cant[tam * tam];
int marca[tam][tam];
int main() {
  int h, w;
  cin >> h >> w;
  int n;
  cin >> n;
  forr(i, 0, n) { cin >> cant[i]; }
  vector<ii> vect;
  int ini, add;
  forr(i, 0, h) {
    if (i % 2)
      ini = w - 1, add = -1;
    else
      ini = 0, add = 1;
    while (ini >= 0 && ini <= w - 1) {
      vect.pb({i, ini});
      ini += add;
    }
  }
  int pos = 0;
  forr(i, 0, n) {
    while (cant[i]--) {
      marca[vect[pos].fi][vect[pos].se] = i + 1;
      pos++;
    }
  }
  forr(i, 0, h) {
    forr(j, 0, w) cout << marca[i][j] << " ";
    cout << endl;
  }
}