Submission #1212745

#TimeUsernameProblemLanguageResultExecution timeMemory
1212745Hamed_GhaffariCrossing (JOI21_crossing)C++20
100 / 100
237 ms12996 KiB
#include <bits/stdc++.h> using namespace std; #define lc id<<1 #define rc lc|1 #define mid ((l+r)>>1) const int MXN = 2e5 + 5; int n, q; string S[9], T; inline void cross(int i, int j, int k) { S[k] = string(n, 'a'); for(int x=0; x<n; x++) if(S[i][x]==S[j][x]) S[k][x] = S[i][x]; else if(S[i][x]!='J' && S[j][x]!='J') S[k][x] = 'J'; else if(S[i][x]!='O' && S[j][x]!='O') S[k][x] = 'O'; else S[k][x] = 'I'; } char lz[MXN<<2], ch[MXN<<2][9]; bool eq[MXN<<2][9]; inline void pull(int id) { for(int i=0; i<9; i++) { ch[id][i] = (ch[lc][i]==ch[rc][i]) ? ch[lc][i] : 'a'; eq[id][i] = eq[lc][i] & eq[rc][i]; } } inline void apply(char c, int id) { lz[id] = c; for(int i=0; i<9; i++) eq[id][i] = (ch[id][i]==c); } inline void push(int id) { if(lz[id]!='a') { apply(lz[id], lc); apply(lz[id], rc); lz[id] = 'a'; } } void build(int l=0, int r=n, int id=1) { lz[id] = 'a'; if(r-l==1) { for(int i=0; i<9; i++) eq[id][i] = ((ch[id][i]=S[i][l])==T[l]); return; } build(l, mid, lc); build(mid, r, rc); pull(id); } void upd(int s, int e, char c, int l=0, int r=n, int id=1) { if(s>=r || l>=e) return; if(s<=l && r<=e) { apply(c, id); return; } push(id); upd(s, e, c, l, mid, lc); upd(s, e, c, mid, r, rc); pull(id); } void print() { for(int i=0; i<9; i++) if(eq[1][i]) { cout << "Yes\n"; return; } cout << "No\n"; } int32_t main() { cin.tie(0); cout.tie(0); ios_base::sync_with_stdio(0); cin >> n >> S[0] >> S[1] >> S[2]; cross(0, 1, 3); cross(0, 2, 4); cross(1, 2, 5); cross(2, 3, 6); cross(1, 4, 7); cross(0, 5, 8); cin >> q >> T; build(); print(); while(q--) { int l, r; char c; cin >> l >> r >> c; upd(l-1, r, c); print(); } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...