#include <bits/stdc++.h>
using namespace std;
const int N=2e5+5;
int n,request,u,v,k,h,save,l,r;
int t[4*N][3],lazy[4*N][3],val[260];
char c;
string s,temp;
vector <int> ve[3];
void build(int id,int l,int r)
{
t[id][h]=0;
lazy[id][h]=-1;
if (l==r) return;
int m=(l+r)/2;
build(id*2,l,m);
build(id*2+1,m+1,r);
}
void down(int id)
{
if (lazy[id][h]!=-1)
{
lazy[id*2][h]=lazy[id][h];
lazy[id*2+1][h]=lazy[id][h];
t[id*2][h]=lazy[id][h];
t[id*2+1][h]=lazy[id][h];
lazy[id][h]=-1;
}
}
void update(int id,int l,int r)
{
if (u>r or v<l) return;
if (u<=l and v>=r)
{
t[id][h]=k;
lazy[id][h]=k;
return;
}
down(id);
int m=(l+r)/2;
update(id*2,l,m);
update(id*2+1,m+1,r);
t[id][h]=t[id*2][h]|t[id*2+1][h];
}
int main()
{
ios_base::sync_with_stdio(NULL);
cin.tie(NULL); cout.tie(NULL);
val['J']=0;
val['O']=1;
val['I']=2;
cin >> n;
cin >> s;
cin >> s;
cin >> s;
s='#'+s;
for (int i=1;i<=n;i++)
ve[val[s[i]]].push_back(i);
cin >> request;
cin >> temp;
temp='#'+temp;
for (h=0;h<=2;h++)
if (!ve[h].empty())
build(1,1,ve[h].size());
for (int i=1;i<=n;i++)
if (s[i]!=temp[i])
{
h=val[s[i]];
u=lower_bound(ve[h].begin(),ve[h].end(),i)-ve[h].begin()+1;
v=u;
k=1;
update(1,1,ve[h].size());
}
if (t[1][0] or t[1][1] or t[1][2]) cout << "No" << '\n';
else cout << "Yes" << '\n';
while (request--)
{
cin >> l >> r >> c;
save=val[c];
for (h=0;h<=2;h++)
if (!ve[h].empty())
{
u=lower_bound(ve[h].begin(),ve[h].end(),l)-ve[h].begin()+1;
v=upper_bound(ve[h].begin(),ve[h].end(),r)-ve[h].begin();
k=(h!=save);
update(1,1,ve[h].size());
}
if (t[1][0] or t[1][1] or t[1][2]) cout << "No" << '\n';
else cout << "Yes" << '\n';
}
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |