This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
#define ll long long int
#define ii long long int
#define endl '\n'
#define pb push_back
#define fi first
#define se second
#define ins insert
#define pf push_front
#define bit(n,k) ((n>>k)&1)
#define pi acos(-1.0)
const ll N=1e5+5, inf = 1e9, mod=1e9+7;
using namespace std;
ii t[4*N],lz[4*N];
void pus(ii v, ii l, ii r){
if(lz[v]==0) return;
t[v]+=(r-l+1)*lz[v];
t[v]%=mod;
if(l!=r){
lz[v<<1]+=lz[v];
lz[v<<1|1]+=lz[v];
lz[v<<1]%=mod;
lz[v<<1|1]%=mod;
}
lz[v]=0;
}
void update(ii v, ii l, ii r, ii x, ii y, ii val){
pus(v,l,r);
if(l>y||r<x) return;
if(x<=l&&r<=y){
lz[v]+=val;
lz[v]%=mod;
pus(v,l,r);
return;
}
ii mid=(l+r)>>1;
update(v<<1,l,mid,x,y,val);
update(v<<1|1,mid+1,r,x,y,val);
t[v]=(t[v<<1]+t[v<<1|1])%mod;
}
ii get(ii v, ii l, ii r, ii x, ii y){
pus(v,l,r);
if(l>y||r<x) return 0;
if(x<=l&&r<=y) return t[v];
ii mid=(l+r)>>1;
return (get(v<<1,l,mid,x,y)+get(v<<1|1,mid+1,r,x,y))%mod;
}
int main(){
// freopen("TRAVEL.INP", "r", stdin);
// freopen("TRAVEL.OUT", "w", stdout);
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
ii n; cin >> n;
pair<ii,ii>a[n+1];
ii dp[n+1];
bool sub3=true;
for(ii i=1;i<=n;i++){
cin >> a[i].fi >> a[i].se;
dp[i]=0;
if(a[i].fi!=1) sub3=false;
}
if(sub3){
update(1,1,n,1,1,1);
for(ii i=1;i<=n;i++){
update(1,1,n,i+1,i+a[i].se,get(1,1,n,i,i));
}
cout << get(1,1,n,1,n) << endl;
}
else{
dp[1]=1;
for(ii i=1;i<=n;i++){
if(a[i].fi==0) continue;
for(ii j=1;j<=a[i].se;j++){
if(i+j*a[i].fi>n) break;
dp[i+j*a[i].fi]+=dp[i];
dp[i+j*a[i].fi]%=mod;
}
}
ii res=0;
for(ii i=1;i<=n;i++){
res+=dp[i];
res%=mod;
}
cout << res << endl;
}
}
# | 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... |