Problem p04023 (C++)

Buggy submission (status: Runtime Error):
///////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////
//                       _oo0oo_                         //
//                      o8888888o                        //
//                      88" . "88      ------ hzt1       //
//                      (| -_- |)                        //
//                      0\  =  /0                        //
//                    ___/`---'\___                      //
//                  .' \|     |// '.                     //
//                 / \|||  :  |||// \                    //
//                / _||||| -:- |||||- \                  //
//               |   | \  -  /// |     |                 //
//               | \_|  ''\---/''  |_/ |                 //
//               \  .-\__  '-'  ___/-. /                 //
//             ___'. .'  /--.--\  `. .'___               //
//          ."" '<  `.___\_<|>_/___.' >' "".             //
//         | | :  `- \`.;`\ _ /`;.`/ - ` : | |           //
//         \  \ `_.   \_ __\ /__ _/   .-` /  /           //
//     =====`-.____`.___ \_____/___.-`___.-'=====        //
//                       `=---='                         //
//                                                       //
//                                                       //
//     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~       //
//                                                       //
//                 God-He Bless All.                     //
//           This Code Will Never Explode.               //
//                                                       //
//                                                       //
///////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////
#include <algorithm>
#include <cctype>
#include <cstdio>
#include <cstring>
#include <vector>
#define pb push_back
#define mp make_pair
#define xx first
#define yy second
#define rep(i, a, b) for (int i = (a), i##_end_ = (b); i <= i##_end_; i++)
#define dwn(i, a, b) for (int i = (a), i##_end_ = (b); i >= i##_end_; i--)
using namespace std;
const int Size = 1 << 16;
char buffer[Size], *head, *tail;
inline char Getchar() {
  if (head == tail) {
    int l = fread(buffer, 1, Size, stdin);
    tail = (head = buffer) + l;
  }
  if (head == tail)
    return -1;
  return *head++;
}
typedef long long ll;
inline ll read() {
  ll x = 0, f = 1;
  char c = Getchar();
  for (; !isdigit(c); c = Getchar())
    if (c == '-')
      f = -1;
  for (; isdigit(c); c = Getchar())
    x = x * 10 + c - '0';
  return x * f;
}
typedef pair<int, int> pii;
const int maxn = 100010;
int n, m, top;
ll ans[maxn], A[maxn], cnt[maxn];
int main() {
  n = read();
  m = read();
  A[++top] = n;
  rep(i, 1, m) {
    ll x = read();
    while (top && A[top] >= x)
      top--;
    A[++top] = x;
  }
  cnt[top] = 1;
  dwn(i, top, 1) {
    ll x = A[i];
    int t;
    while (t = lower_bound(A, A + i + 1, x) - A - 1) {
      cnt[t] += (ll)cnt[i] * (x / A[t]);
      x %= A[t];
    }
    ans[x] += cnt[i];
  }
  dwn(i, n - 1, 1) ans[i] += ans[i + 1];
  rep(i, 1, n) printf("%lld\n", ans[i]);
  return 0;
}


Fixed submission:
///////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////
//                       _oo0oo_                         //
//                      o8888888o                        //
//                      88" . "88      ------ hzt1       //
//                      (| -_- |)                        //
//                      0\  =  /0                        //
//                    ___/`---'\___                      //
//                  .' \|     |// '.                     //
//                 / \|||  :  |||// \                    //
//                / _||||| -:- |||||- \                  //
//               |   | \  -  /// |     |                 //
//               | \_|  ''\---/''  |_/ |                 //
//               \  .-\__  '-'  ___/-. /                 //
//             ___'. .'  /--.--\  `. .'___               //
//          ."" '<  `.___\_<|>_/___.' >' "".             //
//         | | :  `- \`.;`\ _ /`;.`/ - ` : | |           //
//         \  \ `_.   \_ __\ /__ _/   .-` /  /           //
//     =====`-.____`.___ \_____/___.-`___.-'=====        //
//                       `=---='                         //
//                                                       //
//                                                       //
//     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~       //
//                                                       //
//                 God-He Bless All.                     //
//           This Code Will Never Explode.               //
//                                                       //
//                                                       //
///////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////
#include <algorithm>
#include <cctype>
#include <cstdio>
#include <cstring>
#include <vector>
#define pb push_back
#define mp make_pair
#define xx first
#define yy second
#define rep(i, a, b) for (int i = (a), i##_end_ = (b); i <= i##_end_; i++)
#define dwn(i, a, b) for (int i = (a), i##_end_ = (b); i >= i##_end_; i--)
using namespace std;
const int Size = 1 << 16;
char buffer[Size], *head, *tail;
inline char Getchar() {
  if (head == tail) {
    int l = fread(buffer, 1, Size, stdin);
    tail = (head = buffer) + l;
  }
  if (head == tail)
    return -1;
  return *head++;
}
typedef long long ll;
inline ll read() {
  ll x = 0, f = 1;
  char c = Getchar();
  for (; !isdigit(c); c = Getchar())
    if (c == '-')
      f = -1;
  for (; isdigit(c); c = Getchar())
    x = x * 10 + c - '0';
  return x * f;
}
typedef pair<int, int> pii;
const int maxn = 100010;
int n, m, top;
ll ans[maxn], A[maxn], cnt[maxn];
int main() {
  n = read();
  m = read();
  A[++top] = n;
  rep(i, 1, m) {
    ll x = read();
    while (top && A[top] >= x)
      top--;
    A[++top] = x;
  }
  cnt[top] = 1;
  dwn(i, top, 1) {
    ll x = A[i];
    int t;
    while (t = upper_bound(A, A + i, x) - A - 1) {
      cnt[t] += (ll)cnt[i] * (x / A[t]);
      x %= A[t];
    }
    ans[x] += cnt[i];
  }
  dwn(i, n - 1, 1) ans[i] += ans[i + 1];
  rep(i, 1, n) printf("%lld\n", ans[i]);
  return 0;
}