#include <bits/stdc++.h>
using namespace std;
using ll = long long;
#define int long long
#define pii pair<ll, ll>
#define fi first
#define se second
const ll N = 2e5 + 5, mod = 1e9 + 7, block = 320;
int n;
int d[N], x[N];
int dp[N];
int total[block][block];
vector<int> adj[N];
signed main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    cin >> n;
    for (int i = 1; i <= n; i++)
        cin >> d[i] >> x[i];
    dp[1] = 1;
    for (int i = 1; i <= n; i++)
    {
        for (int v : adj[i]) {
            int dv = d[v];
            int rv = v % dv;
            total[dv][rv] = (total[dv][rv] - dp[v] + mod) % mod;
        }
        for (int b = 1; b < block; b++) {
            dp[i] = (dp[i] + total[b][i % b]) % mod;
        }
        if (d[i] == 0) continue;
        if (d[i] >= block) {
            for (int t = 1; t <= x[i]; t++) {
                int j = i + t * d[i];
                if (j > n) break;
                dp[j] = (dp[j] + dp[i]) % mod;
            }
        } else {
            int idx = min(n + 1, i + (x[i] + 1) * d[i]);
            adj[idx].push_back(i);
            int r = i % d[i];
            total[d[i]][r] = (total[d[i]][r] + dp[i]) % mod;
        }
    }
    int sum = 0;
    for (int i = 1; i <= n; i++)
        sum = (sum + dp[i]) % mod;
    cout << sum;
    return 0;
}
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... |