fork download
  1. #include <bits/stdc++.h>
  2. // v.erase( unique(all(v)) , v.end() ) -----> removes duplicates and resizes the vector as so
  3. using namespace std;
  4. #define ll long long
  5. #define lld long double
  6. const lld pi = 3.14159265358979323846;
  7. #define pb push_back
  8. #define pf push_front
  9. #define all(a) a.begin(),a.end()
  10. #define rall(a) a.rbegin(),a.rend()
  11. #define getunique(v) {sort(v.begin(), v.end()); v.erase(unique(v.begin(), v.end()), v.end());}
  12. constexpr int mod = (int)(1e9+7);
  13. #define log(x) (31^__builtin_clz(x)) // Easily calculate log2 on GNU G++ compilers
  14.  
  15.  
  16. int main()
  17. {ios_base::sync_with_stdio(0),cin.tie(0);
  18. string t,p;cin>>t>>p;
  19. int n=t.size(); int m=p.size(); int a[n+1];
  20. for(int i=1;i<=n;i++){
  21. cin>>a[i];
  22. }
  23. int en=n,st=0;int ans=0;
  24. while(en>=st){
  25. int mid=en-(en-st)/2;
  26. bool blocked[n+1]={};
  27. for(int i=1;i<=mid;i++){
  28. blocked[a[i]-1]=1;
  29. }
  30. int cur=0;
  31. for(int i=0;i<n;i++){
  32. if(blocked[i])continue;
  33. if(cur==m)break;
  34. if(t[i]==p[cur])cur++;
  35. }
  36. if(cur==m){
  37. ans=mid;
  38. st=mid+1;continue;
  39. }
  40. en=mid-1;
  41. }
  42. cout<<ans<<'\n';
  43.  
  44.  
  45.  
  46.  
  47.  
  48.  
  49.  
  50. return 0;
  51. }
  52. /*
  53.  
  54.  
  55.  
  56.  
  57.  
  58.  
  59.  
  60.  
  61.  
  62.  
  63.  
  64.  
  65.  
  66.  
  67.  
  68.  
  69.  
  70. */
Success #stdin #stdout 0.01s 5428KB
stdin
Standard input is empty
stdout
0