n=3000的数据没办法读入,a数组和b数组读了一半自动跳出来开始读询问了,蒟蒻真没查出来为什么会读入失败,求助
#include<bits/stdc++.h>
using namespace std;
int cl[800000],cr[800000],wza[800000],wzb[800000],n,lfta[800000],rgta[800000],wa[800000],a[800000],lftb[800000],rgtb[800000],wb[800000],b[800000];
void builda(int p,int l,int r)
{
lfta[p]=l,rgta[p]=r;
if(l==r)
{
wa[p]=a[l];
return;
}
int mid=(l+r)/2;
builda(p*2,l,mid);
builda(p*2+1,mid+1,r);
wa[p]=max(wa[p*2],wa[p*2+1]);
return;
}
void buildb(int p,int l,int r)
{
lftb[p]=l,rgtb[p]=r;
if(l==r)
{
wb[p]=b[l];
return;
}
int mid=(l+r)/2;
buildb(p*2,l,mid);
buildb(p*2+1,mid+1,r);
wb[p]=max(wb[p*2],wb[p*2+1]);
return;
}
int chaxuna(int p,int l,int r)
{
if(lfta[p]>=l && rgta[p]<=r) return wa[p];
int mid=(lfta[p]+rgta[p])/2;
int rt=0;
if(l<=mid) rt=max(rt,chaxuna(p*2,l,r));
if(r>mid) rt=max(rt,chaxuna(p*2+1,l,r));
return rt;
}
int chaxunb(int p,int l,int r)
{
if(lftb[p]>=l && rgtb[p]<=r) return wb[p];
int mid=(lftb[p]+rgtb[p])/2;
int rt=0;
if(l<=mid) rt=max(rt,chaxunb(p*2,l,r));
if(r>mid) rt=max(rt,chaxunb(p*2+1,l,r));
return rt;
}
int read()
{
int x=0,f=1;
char c=getchar();
while(c<'0' || c>'9')
{
if(c=='-') f=-1;
c=getchar();
}
while(c>='0' && c<='9')
{
x=x*10+c-'0';
c=getchar();
}
//cout<<"K";
return x*f;
}
int dfs(int l,int r)
{
if(l>r) return 0;
if(l==r) return a[l]*b[l];
int ma=chaxuna(1,l,r);
int mb=chaxunb(1,l,r);
if(l+1==r) return a[l]*b[l]+a[r]*b[r]+ma*mb;
int mxl=min(wza[ma],wzb[mb]);
int mxr=max(wza[ma],wzb[mb]);
//cout<<"K "<<mxl<<" "<<mxr<<endl;
int rt=0;
rt+=(dfs(l,mxr-1));
rt+=(dfs(mxl+1,r));
rt-=(dfs(mxl+1,mxr-1));
rt+=(r-mxr+1)*(mxl-l+1)*(ma*mb);
return rt;
}
void sol2(int num)
{
int l=cl[num],r=cr[num];
int ans=dfs(l,r);
cout<<ans<<endl;
return;
}
int main()
{
//freopen("match.in","r",stdin);
//freopen("match.out","w",stdout);
int T=read();
n=read();
//cout<<n<<endl;
for(int i=1;i<=n;i++)
{
a[i]=read();
wza[a[i]]=i;
}
for(int i=1;i<=n;i++)
{
b[i]=read();
wzb[b[i]]=i;
}
/*cout<<endl<<"KKK";
for(int i=1;i<=n;i++) cout<<wza[i]<<" ";
cout<<endl<<"BBB";
for(int i=1;i<=n;i++) cout<<wzb[i]<<" ";
cout<<endl;*/
int Q=read();
for(int i=1;i<=Q;i++) cl[i]=read(),cr[i]=read();
builda(1,1,n);
buildb(1,1,n);
for(int i=1;i<=Q;i++) sol2(i);
return 0;
}