USACO和本地都能跑,但是到洛谷上就RE了?
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int mod=1000000007;
int sgn(int x){return x?(x>0ll)<<1ll:1ll;}
int n,A[20],a[305],q,Ll,Rr,ans[305][305],dp[305][20][20][3],tmp[305][305];
int Calc(int x){
int len=0;
for(int i=0;i<18;++i) A[i]=0;
for(;x;++len){
A[len]=x%10ll;
x/=10ll;
}
for(int s=1;s<=n;++s){
memset(dp,0,sizeof(dp));
for(int i=0;i<len;++i) dp[s][i][i][sgn(a[s]-A[i])]=1ll;
for(int i=s+1;i<=n;++i)
for(int l=0;l<len;++l)
for(int r=l;r<len;++r){
dp[i][l][r][0]=dp[i-1][l][r][0];
if(a[i]<A[r]) dp[i][l][r][0]+=dp[i-1][l][r-1][0]+dp[i-1][l][r-1][1]+dp[i-1][l][r-1][2];
else if(a[i]==A[r]) dp[i][l][r][0]+=dp[i-1][l][r-1][0];
if(a[i]<A[l]) dp[i][l][r][0]+=dp[i-1][l+1][r][0]+dp[i-1][l+1][r][1];
else dp[i][l][r][0]+=dp[i-1][l+1][r][0];
dp[i][l][r][0]%=mod;
dp[i][l][r][1]=dp[i-1][l][r][1];
if(a[i]==A[r]) dp[i][l][r][1]+=dp[i-1][l][r-1][1];
if(a[i]==A[l]) dp[i][l][r][1]+=dp[i-1][l+1][r][1];
dp[i][l][r][1]%=mod;
dp[i][l][r][2]=dp[i-1][l][r][2];
if(a[i]==A[r]) dp[i][l][r][2]+=dp[i-1][l][r-1][2];
else if(a[i]>A[r]) dp[i][l][r][2]+=dp[i-1][l][r-1][0]+dp[i-1][l][r-1][1]+dp[i-1][l][r-1][2];
if(a[i]<=A[l]) dp[i][l][r][2]+=dp[i-1][l+1][r][2];
else dp[i][l][r][2]+=dp[i-1][l+1][r][1]+dp[i-1][l+1][r][2];
dp[i][l][r][2]%=mod;
}
for(int i=s;i<=n;++i){
for(int j=0;j<len-1;++j) (ans[s][i]+=dp[i][0][j][0]+dp[i][0][j][1]+dp[i][0][j][2])%=mod;
(ans[s][i]+=dp[i][0][len-1][0]+dp[i][0][len-1][1])%=mod;
}
}
for(int r=1;r<=n;++r)
for(int l=r-1;l;--l) (ans[l][r]+=ans[l+1][r])%=mod;
}
signed main(){
scanf("%lld%lld%lld",&n,&Ll,&Rr);
for(int i=1;i<=n;++i) scanf("%lld",&a[i]);
Calc(Rr);
for(int i=1;i<=n;++i)
for(int j=i;j<=n;++j) tmp[i][j]=ans[i][j];
memset(ans,0,sizeof(ans));
Calc(Ll-1ll);
for(int i=1;i<=n;++i)
for(int j=1;j<=n;++j) ans[i][j]=(tmp[i][j]-ans[i][j]+mod)%mod;
scanf("%lld",&q);
while(q--){
int l,r;
scanf("%lld%lld",&l,&r);
printf("%lld\n",ans[l][r]*2%mod);
}
return 0;
}