对于一个区间,即2*len的一个矩阵,保存以下4个最小值:
1.左上到右上的最短距离;
2.左上到右下的最短距离;
3.左下到右上的最短距离;
4.左下到右下的最短距离。
线段树维护即可。
#include <bits/stdc++.h>
using namespace std;
const int N=2e5+5,inf=1e8;
int n,q;
char str[3][N];
struct node{
int d1,d2,d3,d4;}T[N<<2];
//左上到右上 左上到右下 左下到右上 左下到右下
inline node pushup(node a,node b)
{
node ans;
ans.d1=ans.d2=ans.d3=ans.d4=inf;
ans.d1=min(ans.d1,min(a.d1+b.d1+1,a.d2+b.d3+1));
ans.d2=min(ans.d2,min(a.d1+b.d2+1,a.d2+b.d4+1));
ans.d3