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

#include <bits/stdc++.h>
#include <queue>
using namespace std;

#define what_is(x) cout << #x << " is " << x << endl;
#define PI acos(-1)
#define hell 1000000007
#define HELL 998244353
#define io                                                                     \\
  ios_base::sync_with_stdio(false);                                            \\
  cin.tie(0);                                                                  \\
  cout.tie(0)
#define fix(n) cout << fixed << setprecision(n)
#define mset(a, n) memset(a, n, sizeof a)
#define rep(i, a, b) for (__typeof((b)) i = (a); i < (b); i++)
#define repp(i, a, b, p) for (__typeof((b)) i = (a); i < (b); i += p)
#define ren(i, a, b) for (__typeof((a)) i = (a); i >= (b); i--)
#define renn(i, a, b, p) for(__typeof((a) i=(a);i>=(b);i-=p)
#define ADD(a, b, c) ((a) % c + (b) % c) % c
#define SUB(a, b, c) ((a) % c - (b) % c + c) % c
#define MUL(a, b, c) (((a) % c) * ((b) % c)) % c
#define lbd lower_bound
#define ubd upper_bound
#define ll long long
#define ld long double
#define pb push_back
#define fi first
#define se second
#define vll vector<ll>
#define pll pair<ll, ll>
#define vpll vector<pll>
#define all(v) (v).begin(), (v).end()
#define sz(x) (ll) x.size()
// #define out(n) cout<<n<<" "
#define outl(n) cout << n << endl
#define bug(n)                                                                 \\
  {                                                                            \\
    outl(n);                                                                   \\
    return;                                                                    \\
  }
#define pii pair<int, int>
#define lim 1000000000000000000
#define ninf -9223372036854775802
#define M 998244353
#define eps 1e-9
#define MAX 5
#define N 200006
#define db(a)                                                                  \\
  for (auto it : a) {                                                          \\
    cout << it << " ";                                                         \\
  }                                                                            \\
  cout << endl;
ll prime[MAX];
ll fact[MAX];

const long long INF64 = 1e18;
ll vpow(ll a, ll b, ll p) {
  if (b == 0)
    return 1;
  if (b == 1)
    return a;
  ll temp = vpow(a, b / 2, p);
  temp *= temp;
  temp %= p;
  if (b % 2 == 0)
    return temp;
  temp = temp * a;
  temp %= p;
  return temp;
}

ll gcd(ll a, ll b) {
  if (a == 0)
    return b;
  return gcd(b % a, a);
}

ll inverseMod(ll a, ll b, ll p) {
  if (b == 0)
    return 1;
  ll temp = vpow(b, p - 2, p);
  ll ans = temp * a;
  ans %= p;
  return ans;
}
void sieve() {
  prime[0] = prime[1] = 1;
  for (ll i = 2; i < MAX; i++) {
    if (prime[i] == 0) {
      for (int j = i * 2; j < MAX; j += i) {
        if (prime[j] == 0) {
          prime[j] = i;
        }
      }
      prime[i] = i;
    }
  }
}

void factorial() {
  fact[0] = 1;
  fact[1] = 1;
  rep(i, 2, MAX) {
    fact[i] = (fact[i - 1] * i);
    // fact[i]%=M;
  }
}

ll bit[N];
void update(ll ind, ll val) {
  ind++;
  while (ind < N) {
    bit[ind] += val;
    bit[ind] %= M;
    ind += (ind & (-ind));
  }
}
ll getPref(ll ind) {
  ind++;
  ll ans = 0;
  while (ind > 0) {
    ans += bit[ind];
    ind -= (ind & (-ind));
    ans %= M;
  }
  return ans;
}
ll getRange(ll left, ll right) {
  right = min(right, (ll)N - 2);
  left = min(left, (ll)N - 2);
  ll ans = getPref(right);
  if (left > 0)
    ans -= getPref(left - 1);
  if (ans < M)
    ans += M;
  return ans;
}
void solve(ll ttt) {
  ll n, k;
  cin >> n >> k;
  vpll a(k);
  rep(i, 0, k) cin >> a[i].fi >> a[i].se;
  sort(all(a));
  // memset(seg,0x3f3f3f3f,sizeof(seg));
  vll ans(n, INT_MAX);
  ans[n - 1] = 0;
  // update(1,0,n-1,n-1,0);
  update(n - 1, 1);
  ren(i, n - 2, 0) {
    ll cur = 0;
    rep(j, 0, k) {
      cur += getRange(i + a[j].fi, i + a[j].se);
      cur %= M;
    }
    update(i, cur);
    ans[i] = cur;
    // cout<<"For "<<i<<" ans= "<<cur<<endl;
  }
  cout << ans[0] << endl;
}

int main() {
  io;
  // sieve();
  // factorial();
#ifndef ONLINE_JUDGE
  freopen("input1.txt", "r", stdin);
  // freopen("output1.txt","w",stdout);
#endif

  ll t = 1;
  // cin >> t;
  fix(12);
  rep(q, 1, t + 1) {
    // cout<<"Test case : "<<q<<endl;
    solve(q);
    // solve2();
  }
  return 0;
}


Error: -6
terminate called after throwing an instance of 'std::bad_alloc'
  what():  std::bad_alloc


Fixed submission:

#include <bits/stdc++.h>
#include <queue>
using namespace std;

#define what_is(x) cout << #x << " is " << x << endl;
#define PI acos(-1)
#define hell 1000000007
#define HELL 998244353
#define io                                                                     \\
  ios_base::sync_with_stdio(false);                                            \\
  cin.tie(0);                                                                  \\
  cout.tie(0)
#define fix(n) cout << fixed << setprecision(n)
#define mset(a, n) memset(a, n, sizeof a)
#define rep(i, a, b) for (__typeof((b)) i = (a); i < (b); i++)
#define repp(i, a, b, p) for (__typeof((b)) i = (a); i < (b); i += p)
#define ren(i, a, b) for (__typeof((a)) i = (a); i >= (b); i--)
#define renn(i, a, b, p) for(__typeof((a) i=(a);i>=(b);i-=p)
#define ADD(a, b, c) ((a) % c + (b) % c) % c
#define SUB(a, b, c) ((a) % c - (b) % c + c) % c
#define MUL(a, b, c) (((a) % c) * ((b) % c)) % c
#define lbd lower_bound
#define ubd upper_bound
#define ll long long
#define ld long double
#define pb push_back
#define fi first
#define se second
#define vll vector<ll>
#define pll pair<ll, ll>
#define vpll vector<pll>
#define all(v) (v).begin(), (v).end()
#define sz(x) (ll) x.size()
// #define out(n) cout<<n<<" "
#define outl(n) cout << n << endl
#define bug(n)                                                                 \\
  {                                                                            \\
    outl(n);                                                                   \\
    return;                                                                    \\
  }
#define pii pair<int, int>
#define lim 1000000000000000000
#define ninf -9223372036854775802
#define M 998244353
#define eps 1e-9
#define MAX 5
#define N 200005
#define db(a)                                                                  \\
  for (auto it : a) {                                                          \\
    cout << it << " ";                                                         \\
  }                                                                            \\
  cout << endl;
ll prime[MAX];
ll fact[MAX];

const long long INF64 = 1e18;
ll vpow(ll a, ll b, ll p) {
  if (b == 0)
    return 1;
  if (b == 1)
    return a;
  ll temp = vpow(a, b / 2, p);
  temp *= temp;
  temp %= p;
  if (b % 2 == 0)
    return temp;
  temp = temp * a;
  temp %= p;
  return temp;
}

ll gcd(ll a, ll b) {
  if (a == 0)
    return b;
  return gcd(b % a, a);
}

ll inverseMod(ll a, ll b, ll p) {
  if (b == 0)
    return 1;
  ll temp = vpow(b, p - 2, p);
  ll ans = temp * a;
  ans %= p;
  return ans;
}
void sieve() {
  prime[0] = prime[1] = 1;
  for (ll i = 2; i < MAX; i++) {
    if (prime[i] == 0) {
      for (int j = i * 2; j < MAX; j += i) {
        if (prime[j] == 0) {
          prime[j] = i;
        }
      }
      prime[i] = i;
    }
  }
}

void factorial() {
  fact[0] = 1;
  fact[1] = 1;
  rep(i, 2, MAX) {
    fact[i] = (fact[i - 1] * i);
    // fact[i]%=M;
  }
}

// ll seg[4*N];
// ll get(ll ind,ll left,ll right,ll l,ll r){
//     if(r<left || right<l)
//         return INT_MAX;
//     if(l<=left && right<=r){
//         return seg[ind];
//     }
//     ll mid=left+(right-left)/2;
//     return min(get(2*ind,left,mid,l,r),get(2*ind+1,mid+1,right,l,r));
// }
// void update(ll ind,ll left,ll right,ll ind,ll val){
//     if(ind<left || ind> right)
//         return ;
//     if(left==right){
//         seg[ind]=val;
//         return ;
//     }
//     ll mid=left+(right-left)/2;
//     update(2*ind,left,mid,ind,val);
//     update(2*ind+1,mid+1,right,ind,val);
//     seg[ind]=min(seg[2*ind],seg[2*ind+1]);
// }
ll bit[N];
void update(ll ind, ll val) {
  ind++;
  while (ind < N) {
    bit[ind] += val;
    bit[ind] %= M;
    ind += (ind & (-ind));
  }
}
ll getPref(ll ind) {
  ind++;
  ll ans = 0;
  while (ind > 0) {
    ans += bit[ind];
    ind -= (ind & (-ind));
    ans %= M;
  }
  return ans;
}
ll getRange(ll left, ll right) {
  ll ans = getPref(right);
  if (left > 0)
    ans -= getPref(left - 1);
  if (ans < M)
    ans += M;
  return ans;
}
void solve(ll ttt) {
  ll n, k;
  cin >> n >> k;
  vpll a(k);
  rep(i, 0, k) cin >> a[i].fi >> a[i].se;
  sort(all(a));
  // memset(seg,0x3f3f3f3f,sizeof(seg));
  vll ans(n, INT_MAX);
  ans[n - 1] = 0;
  // update(1,0,n-1,n-1,0);
  update(n - 1, 1);
  ren(i, n - 2, 0) {
    ll cur = 0;
    rep(j, 0, k) {
      cur += getRange(i + a[j].fi, i + a[j].se);
      cur %= M;
    }
    update(i, cur);
    ans[i] = cur;
    // cout<<"For "<<i<<" ans= "<<cur<<endl;
  }
  cout << ans[0] << endl;
}

int main() {
  io;
  // sieve();
  // factorial();
#ifndef ONLINE_JUDGE
  freopen("input1.txt", "r", stdin);
  // freopen("output1.txt","w",stdout);
#endif

  ll t = 1;
  // cin >> t;
  fix(12);
  rep(q, 1, t + 1) {
    // cout<<"Test case : "<<q<<endl;
    solve(q);
    // solve2();
  }
  return 0;
}