Problem p02549 (C++)

Buggy submission (status: Runtime Error):
#include <algorithm>
#include <assert.h>
#include <bitset>
#include <cassert>
#include <cctype>
#include <climits>
#include <cmath>
#include <complex>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <ctime>
#include <deque>
#include <fstream>
#include <functional>
#include <iomanip>
#include <iosfwd>
#include <iostream>
#include <iterator>
#include <list>
#include <map>
#include <math.h>
#include <numeric>
#include <queue>
#include <set>
#include <sstream>
#include <stack>
#include <string>
#include <unordered_map>
#include <utility>
#include <vector>
#pragma GCC optimize("-O3")
using namespace std;
#define fastio                                                                 \
  ios_base::sync_with_stdio(false);                                            \
  cin.tie(NULL);                                                               \
  cout.tie(NULL);                                                              \
  cerr.tie(NULL);
#define tolower(s) transform(s.begin(), s.end(), s.begin(), ::tolower);
#define toupper(s) transform(s.begin(), s.end(), s.begin(), ::toupper);
#define ll long long int
ll max(ll a, ll b) { return a > b ? a : b; }
ll gcd(ll a, ll b) {
  if (a == 0) {
    return b;
  }
  return b == 0 ? a : gcd(b, a % b);
}
#define case(i) cout << "Case #" << i << ": ";
#define debug(args...)                                                         \
  {                                                                            \
    string _s = #args;                                                         \
    replace(_s.begin(), _s.end(), ',', ' ');                                   \
    stringstream _ss(_s);                                                      \
    istream_iterator<string> _it(_ss);                                         \
    err(_it, args);                                                            \
    cerr << '\n';                                                              \
  }
void err(istream_iterator<string> it) {}
template <typename T, typename... Args>
void err(istream_iterator<string> it, T a, Args... args) {
  cerr << "[ " << *it << " = " << a << " ]";
  err(++it, args...);
}
#define pii pair<ll, ll>
#define pb push_back
#define PRECISION 10
const ll inf = 9223372036854775800;
const int MAXN = 100001;
const int LOGN = 22;
const int MAXBIT = 62;
const long double PI = 3.141592653589793;
const int DIGITSIZE = 18;
ll mod = 1e9 + 7;
ll MOD = 998244353;
int x4[] = {1, -1, 0, 0};
int y4[] = {0, 0, 1, -1};
int x8[] = {1, 1, 1, -1, -1, -1, 0, 0};
int y8[] = {1, 0, -1, 1, 0, -1, 1, -1};
bool takeTestCases = 0;
bool printCaseNo = 0;
ll bit[MAXN + 1];
void update(int pos, int val) {
  while (pos <= MAXN) {
    bit[pos] += val % MOD;
    bit[pos] %= MOD;
    pos += (pos & -pos);
  }
}
int query(int pos) {
  ll ans = 0;
  while (pos > 0) {
    ans += bit[pos] % MOD;
    ans %= MOD;
    pos -= (pos & -pos);
  }
  return ans;
}
void getac(int T) {
  int n, k;
  cin >> n >> k;
  vector<pii> q;
  for (int i = 0; i < k; i++) {
    int l, r;
    cin >> l >> r;
    q.pb({l, r});
  }
  ll dp[n + 1];
  for (int i = 0; i <= n; i++) {
    dp[i] = 0;
  }
  dp[0] = 0;
  dp[1] = 1;
  update(1, 1);
  for (int i = 2; i <= n; i++) {
    for (int j = 0; j < k; j++) {
      int l = q[j].first;
      int r = q[j].second;
      l = max(i - l, 0);
      r = max(i - r - 1, 0);
      // cout << j << ' ' << l << ' ' << r << '\n';
      dp[i] += query(l);
      dp[i] -= query(r);
      dp[i] += MOD;
      dp[i] %= MOD;
    }
    update(i, dp[i]);
    // cout << '\n';
  }
  cout << dp[n] << '\n';
}
int main() {

  fastio;
  int t = 1;
  if (takeTestCases) {
    cin >> t;
  }
  int t_t = 1;
  while (t--) {
    if (printCaseNo)
                case (t_t);
		getac(t_t);
		t_t++;
	}
	cerr << "Total time elapsed :" << clock() * 1000.0 / CLOCKS_PER_SEC << " ms" << '\n';
	return 0;
}


Fixed submission:
#include <algorithm>
#include <assert.h>
#include <bitset>
#include <cassert>
#include <cctype>
#include <climits>
#include <cmath>
#include <complex>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <ctime>
#include <deque>
#include <fstream>
#include <functional>
#include <iomanip>
#include <iosfwd>
#include <iostream>
#include <iterator>
#include <list>
#include <map>
#include <math.h>
#include <numeric>
#include <queue>
#include <set>
#include <sstream>
#include <stack>
#include <string>
#include <unordered_map>
#include <utility>
#include <vector>
#pragma GCC optimize("-O3")
using namespace std;
#define fastio                                                                 \
  ios_base::sync_with_stdio(false);                                            \
  cin.tie(NULL);                                                               \
  cout.tie(NULL);                                                              \
  cerr.tie(NULL);
#define tolower(s) transform(s.begin(), s.end(), s.begin(), ::tolower);
#define toupper(s) transform(s.begin(), s.end(), s.begin(), ::toupper);
#define ll long long int
ll max(ll a, ll b) { return a > b ? a : b; }
ll gcd(ll a, ll b) {
  if (a == 0) {
    return b;
  }
  return b == 0 ? a : gcd(b, a % b);
}
#define case(i) cout << "Case #" << i << ": ";
#define debug(args...)                                                         \
  {                                                                            \
    string _s = #args;                                                         \
    replace(_s.begin(), _s.end(), ',', ' ');                                   \
    stringstream _ss(_s);                                                      \
    istream_iterator<string> _it(_ss);                                         \
    err(_it, args);                                                            \
    cerr << '\n';                                                              \
  }
void err(istream_iterator<string> it) {}
template <typename T, typename... Args>
void err(istream_iterator<string> it, T a, Args... args) {
  cerr << "[ " << *it << " = " << a << " ]";
  err(++it, args...);
}
#define pii pair<ll, ll>
#define pb push_back
#define PRECISION 10
const ll inf = 9223372036854775800;
const int MAXN = 200005;
const int LOGN = 22;
const int MAXBIT = 62;
const long double PI = 3.141592653589793;
const int DIGITSIZE = 18;
ll mod = 1e9 + 7;
ll MOD = 998244353;
int x4[] = {1, -1, 0, 0};
int y4[] = {0, 0, 1, -1};
int x8[] = {1, 1, 1, -1, -1, -1, 0, 0};
int y8[] = {1, 0, -1, 1, 0, -1, 1, -1};
bool takeTestCases = 0;
bool printCaseNo = 0;
ll bit[MAXN + 1];
void update(int pos, int val) {
  while (pos <= MAXN) {
    bit[pos] += val % MOD;
    bit[pos] %= MOD;
    pos += (pos & -pos);
  }
}
int query(int pos) {
  ll ans = 0;
  while (pos > 0) {
    ans += bit[pos] % MOD;
    ans %= MOD;
    pos -= (pos & -pos);
  }
  return ans;
}
void getac(int T) {
  int n, k;
  cin >> n >> k;
  vector<pii> q;
  for (int i = 0; i < k; i++) {
    int l, r;
    cin >> l >> r;
    q.pb({l, r});
  }
  ll dp[n + 1];
  for (int i = 0; i <= n; i++) {
    dp[i] = 0;
  }
  dp[0] = 0;
  dp[1] = 1;
  update(1, 1);
  for (int i = 2; i <= n; i++) {
    for (int j = 0; j < k; j++) {
      int l = q[j].first;
      int r = q[j].second;
      l = max(i - l, 0);
      r = max(i - r - 1, 0);
      // cout << j << ' ' << l << ' ' << r << '\n';
      dp[i] += query(l);
      dp[i] -= query(r);
      dp[i] += MOD;
      dp[i] %= MOD;
    }
    update(i, dp[i]);
    // cout << '\n';
  }
  cout << dp[n] << '\n';
}
int main() {

  fastio;
  int t = 1;
  if (takeTestCases) {
    cin >> t;
  }
  int t_t = 1;
  while (t--) {
    if (printCaseNo)
                case (t_t);
		getac(t_t);
		t_t++;
	}
	cerr << "Total time elapsed :" << clock() * 1000.0 / CLOCKS_PER_SEC << " ms" << '\n';
	return 0;
}