Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
37692 | hi_hi | 【J】T2 | C++ | 通过 | 100 | 92 MS | 20040 KB | 1112 | 2025-04-30 20:34:30 |
#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); }