

DEV会爆内存
#include <bits/stdc++.h>
using namespace std;
#define MAXN 100010
int main() {
int n;
cin >> n;
int a[MAXN];
int b[MAXN];
int c[MAXN] = {0};
int d[MAXN] = {0};
for (int i = 0; i < n; i++) {
cin >> a[i];
}
int e = -1;
int f = 0;
for (int i = 0; i < n; i++) {
cin >> b[i];
if (b[i] != 0) {
c[b[i]] = i + 2;
d[b[i]] = i + 2 - b[i];
if (i + 2 - b[i] >= f) {
f = i + 2 - b[i];
}
}
if (b[i] == 1) {
e = i;
}
}
if (e == -1) {
int g = 0;
int h = 0;
int k = d[1]+n;
for (int i = 2; i <= n; i++) {
if (d[i] > h) {
g = 1;
h = d[i];
k = d[i] + n;
}
}
if (g == 0) {
cout << n << endl;
return 0;
} else {
cout << k << endl;
return 0;
}
}
int l = 1;
for (int i = 0; i < n - e; i++) {
if (b[i + e] != i + 1) {
l = 0;
break;
}
}
if (l == 0) {
int h = d[1];
int k = d[1] + n;
for (int i = 2; i <= n; i++) {
if (d[i] > h) {
h = d[i];
k = d[i] + n;
}
}
cout << k << endl;
return 0;
} else {
int g = 0;
int m = n - e + 1;
for (int i = m, j = 1; i <= n; i++, j++) {
if (c[i] > j) {
g = 1;
}
}
if (g == 0) {
cout << e << endl;
return 0;
} else {
cout << e + n + 1 << endl;
return 0;
}
}
}