#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 2e5 + 5;
const int block_size = 320;
const int mod = 1e9 + 7;
int a[N],b[N],dp[N],sum[325][N];
//sum[i][j]: so cach den dinh j voi buoc nhay co do dai i
signed main() {
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
int n;
cin >> n;
for (int i = 1; i <= n; i++) cin >> a[i] >> b[i];
for (int i = n; i > 0; i--) {
dp[i] = 1;
if (a[i] > block_size) {
for (int j = 1; j <= b[i] && i + j * a[i] <= n; j++)
dp[i] = (dp[i] + dp[i + j * a[i]]) % mod;
}
else if (a[i] > 0) {
if (i + a[i] <= n) dp[i] = (dp[i] + sum[a[i]][i + a[i]]) % mod;
if (i + (b[i] + 1) * a[i] <= n) dp[i] = (dp[i] - sum[a[i]][i + (b[i] + 1) * a[i]] + mod) % mod;
}
for (int j = 1; j <= block_size; j++) sum[j][i] = (sum[j][i + j] + dp[i]) % mod;
}
cout << dp[1] << "\n";
}
# | 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... |