# include <iostream> # include <cstdio> # include <cstring> # include <algorithm> using namespace std; const int MAXN = 200000; char a[MAXN+3], b[MAXN+3]; int arr[MAXN+3], vis[MAXN+3]={0}, cas=0, len, len2; bool judge(int x) { int cnt = 1; for(int i=0; i<x; ++i) vis[arr[i]] = cas; for(int i=1; i<=len; ++i) if(a[i] == b[cnt] && vis[i] != cas) { ++cnt; if(cnt == len2+1) return true; } return false; } int main() { while(~scanf("%s%s",a+1,b+1)) { len = strlen(a+1); len2 = strlen(b+1); for(int i=0; i<len; ++i) scanf("%d",&arr[i]); int l=1, r=len, mid; while(l<=r) { ++cas;//时间戳,避免重复memset vis数组浪费时间。 mid = (l+r)>>1; if(judge(mid)) l = mid + 1; else r = mid - 1; } printf("%d\n",r); } return 0; }