把两维分开看
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cstdio>
#include<cmath>
#include<queue>
#include<vector>
#include<climits>
#include<string>
#include<cstdlib>
#include<ctime>
#define LL long long
#define MOD 1000000007
using namespace std;
int prex[900000],prey[900000],a[900000],b[900000],n,m,i,q,xs,ys,xe,ye;
int workx(int x1,int x2)
{
if(x2>=x1) return prex[x2]-prex[x1];
return prex[n]-prex[x1]+prex[x2]+(a[n]^a[1]);
}
int worky(int y1,int y2)
{
if(y2>=y1) return prey[y2]-prey[y1];
return prey[m]-prey[y1]+prey[y2]+(b[m]^b[1]);
}
int main()
{
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
for(i=2;i<=n;i++)
{
if(a[i-1]!=a[i]) prex[i]=prex[i-1]+1;
else prex[i]=prex[i-1];
}
for(i=1;i<=m;i++)
scanf("%d",&b[i]);
for(i=2;i<=m;i++)
{
if(b[i-1]!=b[i]) prey[i]=prey[i-1]+1;
else prey[i]=prey[i-1];
}
scanf("%d",&q);
for(i=1;i<=q;i++)
{
scanf("%d%d%d%d",&xs,&ys,&xe,&ye);
printf("%d\n",min(workx(xs,xe),workx(xe,xs))+min(worky(ys,ye),worky(ye,ys)));
}
return 0;
}