提交时间:2025-04-30 18:49:30

运行 ID: 37646

#include<bits/stdc++.h> using namespace std; long long n,m[200005],a[200005],ans,mod=1000000007; struct sss{ long long l,r; }p[200005]; bool cmp(sss x,sss y){ return x.l<y.l; } inline long long dfs(long long now,long long k,long long op){ if(now==n && op==0)return min(k,p[now].l); if(now==n)return min(k,p[now].r); return (dfs(now+1,min(k,p[now+1].l),0)+dfs(now+1,min(k,p[now+1].r),1))%mod; } int main(){ scanf("%lld",&n); for(int i=1;i<=n;i++){ scanf("%lld",&m[i]); } for(int i=1;i<=n;i++){ scanf("%lld",&a[i]); p[i]=((sss){a[i]-1,m[i]-a[i]}); } ans=dfs(1,p[1].l,0)+dfs(1,p[1].r,1)+1; printf("%lld",ans%mod); }