Problem p02549 (C++) — buggy submission, verdict: Time Limit Exceeded

#include <bits/stdc++.h>

using namespace std;

typedef unsigned long long ull;
typedef long long ll;
typedef pair<int, int> ii;
typedef vector<ii> vii;
typedef vector<int> vi;
typedef vector<ll> vll;

#define PI (2 * acos(0.0))
#define eps 1e-9
#define pb push_back
#define endl "\\n"
#define watch(x) cout << (#x) << " is " << (x) << endl;
#define show(v)                                                                \\
  for (int fi = 0; fi < v.size(); fi++)                                        \\
    cout << v[fi] << " ";                                                      \\
  cout << endl;
#define showpair(v)                                                            \\
  for (int fi = 0; fi < v.size(); fi++)                                        \\
    cout << v[fi].first << " " << v[fi].second << endl;
#define ff first
#define ss second
#define fu cout << "lol" << endl;
#define precision(n) cout << fixed << setprecision(n);
#define lb lower_bound
#define up upper_bound
#define vscan                                                                  \\
  for (i = 0; i < n; i++) {                                                    \\
    cin >> in;                                                                 \\
    v.pb(in);                                                                  \\
  }
#define all(a) a.begin(), a.end()
#define min3(a, b, c) min(a, min(b, c))
#define max3(a, b, c) max(a, max(b, c))
#define mem(a, val) memset(a, val, sizeof(a))
#define loop(i, n) for (i = 0; i < n; i++)
#define TC                                                                     \\
  ull T;                                                                       \\
  cin >> T;                                                                    \\
  while (T--)
#define IN(x)                                                                  \\
  { scanf("%d", &x); }
#define LL(x)                                                                  \\
  { scanf("%lld", &x); }
#define CC(x)                                                                  \\
  { scanf("%c", &x); }
#define pfl(x) printf("%d\\n", x)
#define pfll(x) printf("%lld\\n", x)
#define newl puts("")
#define space printf(" ")
#define MOD 998244353
#define speed                                                                  \\
  ios_base::sync_with_stdio(false);                                            \\
  cin.tie(NULL);

const int N = 3e5;
ll dp[N];
ll dpsum[N];

int main() {
  int i = 0, j = 0, cs = 0, in;
  int n, k;
  cin >> n >> k;
  vii v(k);
  for (int i = 0; i < k; i++) {
    cin >> v[i].ff >> v[i].ss;
  }
  dp[1] = dpsum[1] = 1;
  for (int i = 2; i <= n; i++) {
    for (int j = 0; j < k; j++) {
      if (v[j].ff >= i)
        continue;
      int l = max(1, i - v[j].ss), r = i - v[j].ff;
      dp[i] += (dpsum[r] - dpsum[l - 1]);
      dp[i] = (dp[i] + MOD) % MOD;
    }
    dpsum[i] = dpsum[i - 1] + dp[i], dpsum[i] %= MOD;
  }
  cout << dp[n] << endl;
  return 0;
}


Error: TLE

Fixed submission:

#include <bits/stdc++.h>

using namespace std;

typedef unsigned long long ull;
typedef long long ll;
typedef pair<int, int> ii;
typedef vector<ii> vii;
typedef vector<int> vi;
typedef vector<ll> vll;

#define PI (2 * acos(0.0))
#define eps 1e-9
#define pb push_back
#define endl "\\n"
#define watch(x) cout << (#x) << " is " << (x) << endl;
#define show(v)                                                                \\
  for (int fi = 0; fi < v.size(); fi++)                                        \\
    cout << v[fi] << " ";                                                      \\
  cout << endl;
#define showpair(v)                                                            \\
  for (int fi = 0; fi < v.size(); fi++)                                        \\
    cout << v[fi].first << " " << v[fi].second << endl;
#define ff first
#define ss second
#define fu cout << "lol" << endl;
#define precision(n) cout << fixed << setprecision(n);
#define lb lower_bound
#define up upper_bound
#define vscan                                                                  \\
  for (i = 0; i < n; i++) {                                                    \\
    cin >> in;                                                                 \\
    v.pb(in);                                                                  \\
  }
#define all(a) a.begin(), a.end()
#define min3(a, b, c) min(a, min(b, c))
#define max3(a, b, c) max(a, max(b, c))
#define mem(a, val) memset(a, val, sizeof(a))
#define loop(i, n) for (i = 0; i < n; i++)
#define TC                                                                     \\
  ull T;                                                                       \\
  cin >> T;                                                                    \\
  while (T--)
#define IN(x)                                                                  \\
  { scanf("%d", &x); }
#define LL(x)                                                                  \\
  { scanf("%lld", &x); }
#define CC(x)                                                                  \\
  { scanf("%c", &x); }
#define pfl(x) printf("%d\\n", x)
#define pfll(x) printf("%lld\\n", x)
#define newl puts("")
#define space printf(" ")
#define MOD 1000000007
#define speed                                                                  \\
  ios_base::sync_with_stdio(false);                                            \\
  cin.tie(NULL);

const int N = 3e5;
ll dp[N];

int main() {
  int i = 0, j = 0, cs = 0, in;
  int n, k;
  cin >> n >> k;
  vi v;
  for (int i = 0; i < k; i++) {
    int a, b;
    cin >> a >> b;
    for (int j = a; j <= b; j++)
      v.pb(j);
  }
  dp[1] = 1;
  ll mod = 998244353;
  for (int i = 2; i <= n; i++) {
    for (int j = 0; j < v.size(); j++) {
      if (i - v[j] > 0)
        dp[i] += dp[i - v[j]], dp[i] %= mod;
    }
  }
  cout << dp[n] << endl;
  return 0;
}