#include <bits/stdc++.h>
#define task "a"
#define ll long long
#define mems(x, y) memset(x, y, sizeof(x));
using namespace std;
const int mod = 1e9 + 7, N = 1e5 + 9;
struct pt {
};
int n, block;
int dp[N], d[N], x[N], s[329][N];
int add(int t,int x) {
t+=x;
if(t>=mod) t-=mod;
if(t<0) t+=mod;
return t;
}
void Input() {
cin>>n;
block=max(1,(int)sqrt(n));
for(int i=1;i<=n;i++){
cin>>d[i]>>x[i];
}
for(int i=n;i>=1;i--){
if(d[i]==0){
dp[i]=1;
}
else{
int dd=d[i];
int m=min(x[i],(n-i)/dd);
ll sum=0;
if(dd<=block) {
int id1=i+dd;
int id2=i+(m+1)*dd;
if(id1<=n) {
sum=s[dd][id1];
if(id2<=n) sum=add(sum,-s[dd][id2]);
}
}
else{
for(int k=1;k<=m;k++){
sum=add(sum,dp[i + k * dd]);
}
}
dp[i] = add(dp[i],sum+1);
}
for(int dd=1;dd<=block;dd++){
int val=dp[i];
if(i+dd<=n) {
val=add(val,s[dd][i+dd]);
}
s[dd][i]=val;
}
}
cout<<dp[1];
}
int main(){
Input();
}
# | 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... |