#include <bits/stdc++.h>
#define int long long
#define f first
#define s second
using namespace std;
const int M = 1e9+7;
signed main() {
int n; cin >> n; vector<int> dp(n); vector<vector<int>> c(320,vector<int>(320)); dp[0] = 1;
priority_queue<pair<int,pair<int,int>>,vector<pair<int,pair<int,int>>>,greater<pair<int,pair<int,int>>>> p;
for(int i=0;i<n;i++) {
int a, b; cin >> a >> b;
for(int j=1;j*j<=n;j++) dp[i] += c[j][i%j], dp[i] %= M;
if(a*a <= n && a) {c[a][i%a] += dp[i], c[a][i%a] %= M; p.push({i+a*b,{a,dp[i]}});}
else if(a) for(int j=i+a;j<min(i+a*b+1,n);j+=a) dp[j] += dp[i], dp[j] %= M;
while(!p.empty() && p.top().f == i) {c[p.top().s.f][i%p.top().s.f] += M-p.top().s.s, c[p.top().s.f][i%p.top().s.f] %= M; p.pop();}
}
int ans = 0; for(int i=0;i<n;i++) ans += dp[i];
cout << ans%M << '\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... |