#include <bits/stdc++.h>
using namespace std;
#define int int64_t
int getint(char c)
{
return (c == 'J' ? 0 : (c == 'O' ? 1 : 2));
}
struct SegTree3
{
SegTree3(vector<int> _a){a = _a;};
SegTree3(){a = {};};
vector<int> a;
void modify(int i,int x,int l,int r,int indV)
{
if(l > i || r < i)
return ;
else if(l == r)
{
a[indV] = x;
return ;
}
int m = (l+r)/2;
modify(i,x,l,m,indV*2+1);
modify(i,x,m+1,r,indV*2+2);
a[indV] = (a[indV*2+1] == a[indV*2+2] ? a[indV*2+1] : -1);
return ;
}
int get(int lx,int rx,int l,int r,int indV)
{
if(l > rx || r < lx)
return 4;
else if(l >= lx && r <= rx)
return a[indV];
int m = (l+r)/2;
int sl = get(lx,rx,l,m,indV*2+1);
int sr = get(lx,rx,m+1,r,indV*2+2);
return (sl == 4 ? sr : (sr == 4 ? sl : (sl == sr ? sl : -1)));
}
};
struct Streq
{
Streq(SegTree3 _et,set<pair<pair<int,int>,pair<int,int>>> _seg){et = _et;seg = _seg;};
Streq(){et = SegTree3();seg = {};};
SegTree3 et;
set<pair<pair<int,int>,pair<int,int>>> seg;
int kps = 0;
int ts = 0;
bool isGood()
{
return kps == 0;
}
void modify(int l,int r,int f)
{
if(l > r)
return ;
while(true)
{
// cout << 1 << endl;
// cout << seg.size() << "\n";
auto it = seg.lower_bound(make_pair(make_pair(l,1e6),make_pair(1e6,1e6)));
if(it != seg.begin())
{
it--;
}
if(it == seg.end())
break;
pair<pair<int,int>,pair<int,int>> cur = *it;
if(max(cur.first.first,l) > min(cur.first.second,r))
{
// cout << "!" << endl;
it++;
// cout << "!" << endl;
if(it != seg.end())
cur = *it;
}
// cout << "!" << endl;
if(max(cur.first.first,l) > min(cur.first.second,r))
break;
// cout << 2 << endl;
kps -= (cur.second.second == 1);
seg.erase(it);
if(cur.first.first < l && cur.first.second > r)
{
pair<int,int> o1 = {cur.first.first,l-1};
pair<int,int> o2 = {r+1,cur.first.second};
bool g1 = (et.get(o1.first,o1.second,0,ts-1,0) == cur.second.first);
bool g2 = (et.get(o2.first,o2.second,0,ts-1,0) == cur.second.first);
if(o1.first <= o1.second)
{
seg.insert({o1,{cur.second.first,!g1}});
kps += (!g1);
}
if(o2.first <= o2.second)
{
seg.insert({o2,{cur.second.first,!g2}});
kps += (!g2);
}
}
else if(cur.first.second > r)
{
pair<int,int> o1 = {r+1,cur.first.second};
bool g1 = (et.get(o1.first,o1.second,0,ts-1,0) == cur.second.first);
if(o1.first <= o1.second)
{
seg.insert({o1,{cur.second.first,!g1}});
kps += (!g1);
}
}
else if(cur.first.first < l)
{
pair<int,int> o1 = {cur.first.first,l-1};
bool g1 = (et.get(o1.first,o1.second,0,ts-1,0) == cur.second.first);
if(o1.first <= o1.second)
{
seg.insert({o1,{cur.second.first,!g1}});
kps += (!g1);
}
}
// cout << 3 << endl;
}
// cout << "!" << endl;
bool gg = (et.get(l,r,0,ts-1,0) == f);
seg.insert({{l,r},{f,!gg}});
kps += (!gg);
// cout << kps << "\n";
// cout << "!" << endl;
}
};
vector<vector<Streq>> ms(5,vector<Streq>(3));
bool can_get()
{
bool no = 0;
for(int i = 0;i < 5;++i)
{
bool y = 0;
for(int j = 0;j < 3;++j)
{
if(ms[i][j].isGood())
y = 1;
}
if(!y)
no = 1;
}
return !no;
}
void print_ans()
{
cout << (can_get() ? "Yes\n" : "No\n");
}
signed main()
{
ios_base::sync_with_stdio(false);
cin.tie(0);
int n;
cin >> n;
string aa,bb,cc;
cin >> aa >> bb >> cc;
vector<int> a(n),b(n),c(n);
for(int i = 0;i < n;++i)
{
a[i] = getint(aa[i]);
b[i] = getint(bb[i]);
c[i] = getint(cc[i]);
}
vector<vector<int>> ix(5);
vector<vector<int>> ind;
for(int i = 0;i < n;++i)
{
if(a[i] == b[i] && a[i] != c[i])
{
ix[0].push_back(i);
ind.push_back({a[i],c[i],3 - a[i] - c[i]});
}
if(a[i] == c[i] && a[i] != b[i])
{
ix[1].push_back(i);
ind.push_back({a[i],b[i],3 - a[i] - b[i]});
}
if(c[i] == b[i] && a[i] != c[i])
{
ix[2].push_back(i);
ind.push_back({b[i],a[i],3 - a[i] - b[i]});
}
if(a[i] != b[i] && a[i] != c[i] && b[i] != c[i])
{
ix[3].push_back(i);
ind.push_back({a[i],b[i],c[i]});
}
if(a[i] == b[i] && b[i] ==c[i])
{
ix[4].push_back(i);
ind.push_back({a[i],a[i],a[i]});
}
}
int q;
cin >> q;
string t0;
cin >> t0;
for(int i = 0;i < 5;++i)
{
for(int j = 0;j < 3;++j)
{
vector<int> tet,tcur;
for(int k = 0;k < ix[i].size();++k)
{
tet.push_back(ind[ix[i][k]][j]);
tcur.push_back(getint(t0[ix[i][k]]));
}
ms[i][j].et.a.resize(4*tet.size());
ms[i][j].ts = tet.size();
for(int k = 0;k < tet.size();++k)
{
ms[i][j].et.modify(k,tet[k],0,int(tet.size())-1,0);
}
for(int k = 0;k < tet.size();++k)
{
ms[i][j].seg.insert({{k,k},{tcur[k],tcur[k] != tet[k]}});
ms[i][j].kps += (tcur[k] != tet[k]);
}
}
}
print_ans();
while(q--)
{
int l,r;
char cc;
cin >> l >> r >> cc;
l--;
r--;
int f = getint(cc);
for(int i = 0;i < 5;++i)
{
int lg = lower_bound(ix[i].begin(),ix[i].end(),l)-ix[i].begin();
int rg = upper_bound(ix[i].begin(),ix[i].end(),r)-ix[i].begin()-1;
for(int j = 0;j < 3;++j)
ms[i][j].modify(lg,rg,f);
}
print_ans();
}
}
Compilation message
Main.cpp: In function 'int main()':
Main.cpp:217:29: warning: comparison of integer expressions of different signedness: 'int64_t' {aka 'long int'} and 'std::vector<long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
217 | for(int k = 0;k < ix[i].size();++k)
| ~~^~~~~~~~~~~~~~
Main.cpp:224:29: warning: comparison of integer expressions of different signedness: 'int64_t' {aka 'long int'} and 'std::vector<long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
224 | for(int k = 0;k < tet.size();++k)
| ~~^~~~~~~~~~~~
Main.cpp:229:29: warning: comparison of integer expressions of different signedness: 'int64_t' {aka 'long int'} and 'std::vector<long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
229 | for(int k = 0;k < tet.size();++k)
| ~~^~~~~~~~~~~~
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
340 ms |
2388 KB |
Output is correct |
2 |
Correct |
353 ms |
2416 KB |
Output is correct |
3 |
Correct |
274 ms |
2504 KB |
Output is correct |
4 |
Correct |
318 ms |
2440 KB |
Output is correct |
5 |
Correct |
278 ms |
2344 KB |
Output is correct |
6 |
Correct |
287 ms |
2600 KB |
Output is correct |
7 |
Correct |
281 ms |
2532 KB |
Output is correct |
8 |
Correct |
303 ms |
2388 KB |
Output is correct |
9 |
Correct |
299 ms |
2544 KB |
Output is correct |
10 |
Correct |
296 ms |
2896 KB |
Output is correct |
11 |
Correct |
311 ms |
2596 KB |
Output is correct |
12 |
Correct |
294 ms |
2388 KB |
Output is correct |
13 |
Correct |
300 ms |
2464 KB |
Output is correct |
14 |
Correct |
291 ms |
2384 KB |
Output is correct |
15 |
Correct |
304 ms |
2740 KB |
Output is correct |
16 |
Correct |
294 ms |
2576 KB |
Output is correct |
17 |
Correct |
306 ms |
2664 KB |
Output is correct |
18 |
Correct |
222 ms |
2308 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
340 ms |
2388 KB |
Output is correct |
2 |
Correct |
353 ms |
2416 KB |
Output is correct |
3 |
Correct |
274 ms |
2504 KB |
Output is correct |
4 |
Correct |
318 ms |
2440 KB |
Output is correct |
5 |
Correct |
278 ms |
2344 KB |
Output is correct |
6 |
Correct |
287 ms |
2600 KB |
Output is correct |
7 |
Correct |
281 ms |
2532 KB |
Output is correct |
8 |
Correct |
303 ms |
2388 KB |
Output is correct |
9 |
Correct |
299 ms |
2544 KB |
Output is correct |
10 |
Correct |
296 ms |
2896 KB |
Output is correct |
11 |
Correct |
311 ms |
2596 KB |
Output is correct |
12 |
Correct |
294 ms |
2388 KB |
Output is correct |
13 |
Correct |
300 ms |
2464 KB |
Output is correct |
14 |
Correct |
291 ms |
2384 KB |
Output is correct |
15 |
Correct |
304 ms |
2740 KB |
Output is correct |
16 |
Correct |
294 ms |
2576 KB |
Output is correct |
17 |
Correct |
306 ms |
2664 KB |
Output is correct |
18 |
Correct |
222 ms |
2308 KB |
Output is correct |
19 |
Correct |
1047 ms |
93544 KB |
Output is correct |
20 |
Correct |
908 ms |
92932 KB |
Output is correct |
21 |
Correct |
1283 ms |
88176 KB |
Output is correct |
22 |
Correct |
1069 ms |
80180 KB |
Output is correct |
23 |
Correct |
566 ms |
7928 KB |
Output is correct |
24 |
Correct |
566 ms |
7988 KB |
Output is correct |
25 |
Correct |
1341 ms |
92504 KB |
Output is correct |
26 |
Correct |
1200 ms |
92100 KB |
Output is correct |
27 |
Correct |
902 ms |
92568 KB |
Output is correct |
28 |
Correct |
982 ms |
92084 KB |
Output is correct |
29 |
Correct |
889 ms |
91836 KB |
Output is correct |
30 |
Correct |
519 ms |
8056 KB |
Output is correct |
31 |
Correct |
904 ms |
93404 KB |
Output is correct |
32 |
Correct |
922 ms |
86052 KB |
Output is correct |
33 |
Correct |
542 ms |
7820 KB |
Output is correct |
34 |
Correct |
1014 ms |
93408 KB |
Output is correct |
35 |
Correct |
1153 ms |
71144 KB |
Output is correct |
36 |
Correct |
542 ms |
7904 KB |
Output is correct |
37 |
Correct |
540 ms |
7828 KB |
Output is correct |
38 |
Correct |
741 ms |
91716 KB |
Output is correct |
39 |
Correct |
658 ms |
93076 KB |
Output is correct |
40 |
Correct |
1238 ms |
61388 KB |
Output is correct |
41 |
Correct |
1038 ms |
92560 KB |
Output is correct |
42 |
Correct |
298 ms |
91536 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
340 ms |
2388 KB |
Output is correct |
2 |
Correct |
353 ms |
2416 KB |
Output is correct |
3 |
Correct |
274 ms |
2504 KB |
Output is correct |
4 |
Correct |
318 ms |
2440 KB |
Output is correct |
5 |
Correct |
278 ms |
2344 KB |
Output is correct |
6 |
Correct |
287 ms |
2600 KB |
Output is correct |
7 |
Correct |
281 ms |
2532 KB |
Output is correct |
8 |
Correct |
303 ms |
2388 KB |
Output is correct |
9 |
Correct |
299 ms |
2544 KB |
Output is correct |
10 |
Correct |
296 ms |
2896 KB |
Output is correct |
11 |
Correct |
311 ms |
2596 KB |
Output is correct |
12 |
Correct |
294 ms |
2388 KB |
Output is correct |
13 |
Correct |
300 ms |
2464 KB |
Output is correct |
14 |
Correct |
291 ms |
2384 KB |
Output is correct |
15 |
Correct |
304 ms |
2740 KB |
Output is correct |
16 |
Correct |
294 ms |
2576 KB |
Output is correct |
17 |
Correct |
306 ms |
2664 KB |
Output is correct |
18 |
Correct |
222 ms |
2308 KB |
Output is correct |
19 |
Correct |
695 ms |
2460 KB |
Output is correct |
20 |
Correct |
507 ms |
2348 KB |
Output is correct |
21 |
Correct |
345 ms |
2416 KB |
Output is correct |
22 |
Correct |
308 ms |
2300 KB |
Output is correct |
23 |
Correct |
357 ms |
2476 KB |
Output is correct |
24 |
Correct |
373 ms |
2656 KB |
Output is correct |
25 |
Correct |
350 ms |
2380 KB |
Output is correct |
26 |
Correct |
325 ms |
2384 KB |
Output is correct |
27 |
Correct |
349 ms |
2592 KB |
Output is correct |
28 |
Correct |
314 ms |
2388 KB |
Output is correct |
29 |
Correct |
361 ms |
2744 KB |
Output is correct |
30 |
Correct |
325 ms |
2352 KB |
Output is correct |
31 |
Correct |
446 ms |
2632 KB |
Output is correct |
32 |
Correct |
450 ms |
2384 KB |
Output is correct |
33 |
Correct |
463 ms |
3080 KB |
Output is correct |
34 |
Correct |
387 ms |
2388 KB |
Output is correct |
35 |
Correct |
429 ms |
2624 KB |
Output is correct |
36 |
Correct |
468 ms |
2644 KB |
Output is correct |
37 |
Correct |
448 ms |
2368 KB |
Output is correct |
38 |
Correct |
462 ms |
2644 KB |
Output is correct |
39 |
Correct |
438 ms |
2828 KB |
Output is correct |
40 |
Correct |
468 ms |
2384 KB |
Output is correct |
41 |
Correct |
443 ms |
2692 KB |
Output is correct |
42 |
Correct |
490 ms |
2932 KB |
Output is correct |
43 |
Correct |
406 ms |
2384 KB |
Output is correct |
44 |
Correct |
479 ms |
2556 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
340 ms |
2388 KB |
Output is correct |
2 |
Correct |
353 ms |
2416 KB |
Output is correct |
3 |
Correct |
274 ms |
2504 KB |
Output is correct |
4 |
Correct |
318 ms |
2440 KB |
Output is correct |
5 |
Correct |
278 ms |
2344 KB |
Output is correct |
6 |
Correct |
287 ms |
2600 KB |
Output is correct |
7 |
Correct |
281 ms |
2532 KB |
Output is correct |
8 |
Correct |
303 ms |
2388 KB |
Output is correct |
9 |
Correct |
299 ms |
2544 KB |
Output is correct |
10 |
Correct |
296 ms |
2896 KB |
Output is correct |
11 |
Correct |
311 ms |
2596 KB |
Output is correct |
12 |
Correct |
294 ms |
2388 KB |
Output is correct |
13 |
Correct |
300 ms |
2464 KB |
Output is correct |
14 |
Correct |
291 ms |
2384 KB |
Output is correct |
15 |
Correct |
304 ms |
2740 KB |
Output is correct |
16 |
Correct |
294 ms |
2576 KB |
Output is correct |
17 |
Correct |
306 ms |
2664 KB |
Output is correct |
18 |
Correct |
222 ms |
2308 KB |
Output is correct |
19 |
Correct |
1047 ms |
93544 KB |
Output is correct |
20 |
Correct |
908 ms |
92932 KB |
Output is correct |
21 |
Correct |
1283 ms |
88176 KB |
Output is correct |
22 |
Correct |
1069 ms |
80180 KB |
Output is correct |
23 |
Correct |
566 ms |
7928 KB |
Output is correct |
24 |
Correct |
566 ms |
7988 KB |
Output is correct |
25 |
Correct |
1341 ms |
92504 KB |
Output is correct |
26 |
Correct |
1200 ms |
92100 KB |
Output is correct |
27 |
Correct |
902 ms |
92568 KB |
Output is correct |
28 |
Correct |
982 ms |
92084 KB |
Output is correct |
29 |
Correct |
889 ms |
91836 KB |
Output is correct |
30 |
Correct |
519 ms |
8056 KB |
Output is correct |
31 |
Correct |
904 ms |
93404 KB |
Output is correct |
32 |
Correct |
922 ms |
86052 KB |
Output is correct |
33 |
Correct |
542 ms |
7820 KB |
Output is correct |
34 |
Correct |
1014 ms |
93408 KB |
Output is correct |
35 |
Correct |
1153 ms |
71144 KB |
Output is correct |
36 |
Correct |
542 ms |
7904 KB |
Output is correct |
37 |
Correct |
540 ms |
7828 KB |
Output is correct |
38 |
Correct |
741 ms |
91716 KB |
Output is correct |
39 |
Correct |
658 ms |
93076 KB |
Output is correct |
40 |
Correct |
1238 ms |
61388 KB |
Output is correct |
41 |
Correct |
1038 ms |
92560 KB |
Output is correct |
42 |
Correct |
298 ms |
91536 KB |
Output is correct |
43 |
Correct |
695 ms |
2460 KB |
Output is correct |
44 |
Correct |
507 ms |
2348 KB |
Output is correct |
45 |
Correct |
345 ms |
2416 KB |
Output is correct |
46 |
Correct |
308 ms |
2300 KB |
Output is correct |
47 |
Correct |
357 ms |
2476 KB |
Output is correct |
48 |
Correct |
373 ms |
2656 KB |
Output is correct |
49 |
Correct |
350 ms |
2380 KB |
Output is correct |
50 |
Correct |
325 ms |
2384 KB |
Output is correct |
51 |
Correct |
349 ms |
2592 KB |
Output is correct |
52 |
Correct |
314 ms |
2388 KB |
Output is correct |
53 |
Correct |
361 ms |
2744 KB |
Output is correct |
54 |
Correct |
325 ms |
2352 KB |
Output is correct |
55 |
Correct |
446 ms |
2632 KB |
Output is correct |
56 |
Correct |
450 ms |
2384 KB |
Output is correct |
57 |
Correct |
463 ms |
3080 KB |
Output is correct |
58 |
Correct |
387 ms |
2388 KB |
Output is correct |
59 |
Correct |
429 ms |
2624 KB |
Output is correct |
60 |
Correct |
468 ms |
2644 KB |
Output is correct |
61 |
Correct |
448 ms |
2368 KB |
Output is correct |
62 |
Correct |
462 ms |
2644 KB |
Output is correct |
63 |
Correct |
438 ms |
2828 KB |
Output is correct |
64 |
Correct |
468 ms |
2384 KB |
Output is correct |
65 |
Correct |
443 ms |
2692 KB |
Output is correct |
66 |
Correct |
490 ms |
2932 KB |
Output is correct |
67 |
Correct |
406 ms |
2384 KB |
Output is correct |
68 |
Correct |
479 ms |
2556 KB |
Output is correct |
69 |
Correct |
3033 ms |
75984 KB |
Output is correct |
70 |
Correct |
2856 ms |
89316 KB |
Output is correct |
71 |
Correct |
779 ms |
7644 KB |
Output is correct |
72 |
Correct |
825 ms |
7700 KB |
Output is correct |
73 |
Correct |
772 ms |
7888 KB |
Output is correct |
74 |
Correct |
1678 ms |
76816 KB |
Output is correct |
75 |
Correct |
757 ms |
7480 KB |
Output is correct |
76 |
Correct |
2031 ms |
90024 KB |
Output is correct |
77 |
Correct |
1549 ms |
76996 KB |
Output is correct |
78 |
Correct |
782 ms |
7724 KB |
Output is correct |
79 |
Correct |
764 ms |
7904 KB |
Output is correct |
80 |
Correct |
2568 ms |
65292 KB |
Output is correct |
81 |
Correct |
1133 ms |
7848 KB |
Output is correct |
82 |
Correct |
3092 ms |
89244 KB |
Output is correct |
83 |
Correct |
2514 ms |
84620 KB |
Output is correct |
84 |
Correct |
1176 ms |
7708 KB |
Output is correct |
85 |
Correct |
1197 ms |
7688 KB |
Output is correct |
86 |
Correct |
1518 ms |
68096 KB |
Output is correct |
87 |
Correct |
1910 ms |
90336 KB |
Output is correct |
88 |
Correct |
1113 ms |
7564 KB |
Output is correct |
89 |
Correct |
1722 ms |
80008 KB |
Output is correct |
90 |
Correct |
1998 ms |
89752 KB |
Output is correct |
91 |
Correct |
1112 ms |
7844 KB |
Output is correct |
92 |
Correct |
2660 ms |
67952 KB |
Output is correct |
93 |
Correct |
1161 ms |
7624 KB |
Output is correct |
94 |
Correct |
1167 ms |
7656 KB |
Output is correct |
95 |
Correct |
1164 ms |
7580 KB |
Output is correct |
96 |
Correct |
696 ms |
92720 KB |
Output is correct |
97 |
Incorrect |
456 ms |
92176 KB |
Output isn't correct |
98 |
Halted |
0 ms |
0 KB |
- |