Untitled
unknown
plain_text
a year ago
1.8 kB
7
Indexable
#include <bits/stdc++.h>
using namespace std;
bool isSunsequence(string &s1, string &s2){
int n = s1.size();
int m = s2.size();
int i=0;
int j =0;
while(i<n){
if(s1[i] == s2[j]){
j++;
}
i++;
}
return j == m;
}
bool isPossible(string &s1, string &s2, vector<pair<int, int>> &mutations, int mid){
vector<int> mutationEffect(s1.size()+1, 0);
for(int i=0; i<mid; i++){
int st = mutations[i].first;
int e = mutations[i].second;
mutationEffect[st]++;
if(e+1 < s1.size()+1){
mutationEffect[e+1]--;
}
}
for(int i=1; i<s1.size(); i++){
mutationEffect[i] += mutationEffect[i-1];
}
for(int i=0; i<s1.size(); i++){
if(mutationEffect[i] > 0){
s1[i] = '$';
}
}
return isSunsequence(s1, s2);
}
int maxDaysToMutate(string &s1, string &s2, vector<pair<int, int>> &mutations){
int l =0;
int r = mutations.size();
int ans = 0;
while(l<=r){
int mid = (l+r)/2;
if(isPossible(s1, s2, mutations, mid)){
ans = mid;
l = mid +1;
}
else{
r = mid-1;
}
}
return ans;
}
int solve(string &s1, string &s2, vector<int> &start, vector<int> &end){
int n = start.size();
vector<pair<int, int>> mutations;
for(int i=0; i<n; i++){
mutations.push_back({start[i], end[i]});
}
return maxDaysToMutate(s1, s2, mutations);
}
int main() {
// your code goes here
string s1, s2;
cin>>s1>>s2;
int n;
cin>>n;
vector<int> start(n);
vector<int> end(n);
for(int i=0; i<n; i++){
cin>>start[i];
}
for(int i=0; i<n; i++){
cin>>end[i];
}
int ans = solve(s1, s2, start, end);
cout<<ans<<endl;
}
Editor is loading...
Leave a Comment