トピックポータル //解像度TP nowcoder
分析
定理:B1〜B2のIFF B1とB2は、デカルトツリーの同一の構成を有しています。(B₁〜B₂IFFB₁とB₂は同型デカルトの木を持っています。)
デカルトツリールートの小さなスタックは、各ノードが同時に挿入されると同時にAの構成及びBは、同型か否かを判定することができます。
#include<iostream>
#include<cstdio>
using namespace std;
const int L = 100010;
int a[L],b[L],u[L],v[L];
int n;
void build(){
u[n + 1] = v[n + 1] + 1;
int i;
for(i = 2;i<=n;++i){
int k1 = i-1,k2 = i-1;
while(a[i] < a[k1]) k1 = u[k1];
while(b[i] < b[k2]) k2 = v[k2];
if(k1!=k2){
printf("%d\n",i-1);break;
}
u[i] = k1;v[i] = k2;
}
if(i == n+1) printf("%d\n",n);
}
int main(){
while(scanf(" %d",&n)!=EOF){
for(int i = 1;i <= n;++i){
scanf(" %d",&a[i]);u[i]=0;
}
for(int i = 1;i <= n;++i){
scanf(" %d",&b[i]);v[i]=0;
}
build();
}
return 0;
}