不知道有没有跟我思路一样的()
我这个输出的答案是正确的 但是时间开销较大 所以TLE了 想请问正解做法
#include <iostream>
#define int long long
using namespace std;
const int M=1e9+7;
const int N=2e5+10;
int m[N],a[N],up[N],down[N];
int n;
signed 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]);
int lim=-1;
for(int i=1;i<=n;i++){
up[i]=m[i]-a[i];
down[i]=a[i]-1;
lim=max(lim,max(up[i],down[i]));
}
int i=1,ans=1;
for(;i<=lim;i++){
int add=1;
for(int j=1;j<=n;j++){
int now=0;
if(up[j]>=i) now++;
if(down[j]>=i) now++;
add=add*(now%M);
add%=M;
}
ans+=add%M;
ans%=M;
if(!add) break;
}
printf("%lld",ans%M);
return 0;
}