이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
using namespace std;
typedef long long int ll;
typedef pair<int, int> pii;
typedef pair<ll,ll> pll;
typedef pair<int, pair<int,int> > piii;
typedef pair<pair<ll,ll> ,pair<ll, ll> > plll;
typedef vector <ll> vi;
#define forw(i,a,b) for (ll i=a;i<=(b);i++)
#define forb(i,a,b) for (ll i=a;i>=(b);i--)
#define fastIO {ios::sync_with_stdio(false); cin.tie(0); }
#define fi first
#define se second
#define pu push
#define puf push_front
#define pb push_back
#define pof pop_front
#define pob pop_back
#define fr front
#define all(a) a.begin(),a.end()
const ll oo=1e18;
const ll mod=1e9+7;
const int base=31;
const ll maxN=3e5+5;
const int tx[4]={0,1,0,-1};
const int ty[4]={1,0,-1,0};
const ll maxM=maxN*4+5;
const ll block=500;
#define mul(a,b) (a*b)%mod
#define add(a,b) (a+b)%mod
ll pre[maxN],n,key,q;
string s1,s2,s3,s4;
struct segment
{
vector <ll> seg,lazy;
segment(int n)
{
seg.assign(4*n+5,0);
lazy.assign(4*n+5,0);
}
ll get_pre(int l, int r)
{
ll ans=pre[r];
if (l>0) ans=(ans-pre[l-1]+mod)%mod;
return ans;
}
void down(int id, int l, int r, int mid)
{
if (!lazy[id]) return;
seg[id*2]=mul(get_pre(l-1,mid-1),lazy[id]);
lazy[id*2]=lazy[id];
seg[id*2+1]=mul(get_pre(mid,r-1),lazy[id]);
lazy[id*2+1]=lazy[id];
lazy[id]=0;
return;
}
void update(int id, int l, int r, int u, int v, ll val)
{
if (v<l || r<u) return;
if (u<=l && r<=v)
{
seg[id]=mul(get_pre(l-1,r-1),val);
lazy[id]=val;
return;
}
int mid=(l+r)/2;
down(id,l,r,mid);
update(id*2,l,mid,u,v,val);
update(id*2+1,mid+1,r,u,v,val);
seg[id]=add(seg[id*2],seg[id*2+1]);
return;
}
};
ll get(char c)
{
if (c=='J') return 1;
if (c=='O') return 2;
return 3;
}
void solve()
{
cin>>n;
cin>>s1>>s2>>s3;
cin>>q;
cin>>s4;
ll tmp=1;
//power[0]=1;
pre[0]=1;
segment seg(n);
forw(i,1,n)
{
//power[i]=mul(power[i-1],5);
key=add(key,mul(get(s1[i-1]),tmp));
tmp=mul(tmp,5);
pre[i]=add(pre[i-1],tmp);
seg.update(1,1,n,i,i,get(s4[i-1]));
}
//cout<<key<<endl;
if (seg.seg[1]==key) cout<<"Yes\n";
else cout<<"No\n";
while (q--)
{
int l,r; char c; cin>>l>>r>>c;
seg.update(1,1,n,l,r,get(c));
if (seg.seg[1]==key) cout<<"Yes\n";
else cout<<"No\n";
}
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
//freopen("a.inp","r",stdin);
//freopen("a.out","w",stdout);
solve();
return 0;
}
# | 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... |