提交时间:2025-04-30 20:34:30

运行 ID: 37692

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