#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const ll mod = 1e9+7;
int n;
ll dd[100405], dura[100405];
ll dp[100405];
ll qs[100405][405];
int sq = 400;
int main() {
cin.tie(0) -> sync_with_stdio(0);
cin >> n;
for(int i=1;i<=n;i++) {
cin >> dd[i] >> dura[i];
}
for(int i=n;i>=1;i--) {
dp[i] = 1;
if(dd[i]) {
if(dd[i] >= sq) {
//calculate directly
for(int j=1, ci=i + dd[i];j<=dura[i], ci <= n;j++, ci += dd[i]) {
dp[i] += dp[ci];
while(dp[i] >= mod) dp[i] -= mod;
}
} else {
dp[i] = dp[i] + (qs[i+dd[i]][dd[i]]);
if(i+dd[i]*(dura[i]+1) <= n) dp[i] -= qs[i+dd[i]*(dura[i]+1)][dd[i]];
while(dp[i] < 0) dp[i] += mod;
while(dp[i] >= mod) dp[i] -= mod;
}
}
for(int cd=1;cd<=sq;cd++) {
qs[i][cd] = qs[i+cd][cd] + dp[i];
while(qs[i][cd] >= mod) qs[i][cd] -= mod;
}
//cout << dp
}
cout << dp[1];
}
# | 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... |