#include <bits/stdc++.h>
using namespace std;
typedef pair<int, int> pii;
set<pii> init(string s) {
s += '0';
int prev = 0;
set<pii> ret;
// 1 が連続する区間を全て set に入れる
for(size_t i=0; i<s.length(); i++) {
if(s[i-1] == '1' && s[i] == '0') ret.insert(pii(prev, i-1));
if(s[i-1] == '0' && s[i] == '1') prev = i;
}
return ret;
}
int main() {
int n, q; cin >> n;
string s; cin >> s;
set<pii> range = init(s);
range.insert(pii(-1e9, -1e9));
range.insert(pii( 1e9, 1e9));
cin >> q;
for(int i=0; i<q; i++) {
int l, r, b; cin >> l >> r >> b;
l--; r--;
// 左端が l を超えない最大の値である区間を取る
auto it = range.upper_bound(pii(l,0)); it--;
int x = (*it).first, y = (*it).second;
// 既存の区間がクエリの区間を被覆している
if(x <= l && r <= y) {
if(b == 0) {
range.erase(it);
if(x <= l-1) range.insert(pii(x, l-1));
if(r+1 <= y) range.insert(pii(r+1, y));
}
}
// 既存の区間がクエリの区間を被覆しない (4 つの可能性がある)
// -> クエリの区間が既存の区間を被覆している
// -> クエリの区間が既存の区間の左一部を被覆している
// -> クエリの区間が既存の区間の右一部を被覆している
// -> 既存のクエリとクエリの区間が接している (1 に更新するときに気をつけなければならない)
else {
auto it2 = range.lower_bound(pii(l,0)); it2--;
if(b == 0) {
while((*it2).first <= r) {
x = (*it2).first, y = (*it2).second;
bool ok = false;
// 右一部
if(x <= l && l <= y) {
if(x <= l-1) range.insert(pii(x, l-1));
ok = true;
}
// 左一部
if(x <= r && r <= y) {
if(r+1 <= y) range.insert(pii(r+1, y));
ok = true;
}
// 既存の区間を被覆
if((l <= x && y <= r) || ok) {
it2 = range.erase(it2);
}
else it2++;
}
}
else {
int L = l, R = r;
while(1) {
x = (*it2).first, y = (*it2).second;
// どのパターンでもやることは変わらない
bool b1 = (x <= L && L <= y);
bool b2 = (x <= R && R <= y);
bool b3 = (L <= x && y <= R);
bool b4 = (L - 1 == y);
bool b5 = (R + 1 == x);
if(b1 || b2 || b3 || b4 || b5) {
it2 = range.erase(it2);
L = min(L, x);
R = max(R, y);
}
else {
if((*it2).first <= r) it2++;
else break;
}
}
range.insert(pii(L, R));
}
}
cout << range.size() - 2 << endl;
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnR5cGVkZWYgcGFpcjxpbnQsIGludD4gcGlpOwoKc2V0PHBpaT4gaW5pdChzdHJpbmcgcykgewogICAgcyArPSAnMCc7CiAgICBpbnQgcHJldiA9IDA7CiAgICBzZXQ8cGlpPiByZXQ7CgogICAgLy8gMSDjgYzpgKPntprjgZnjgovljLrplpPjgpLlhajjgaYgc2V0IOOBq+WFpeOCjOOCiwogICAgZm9yKHNpemVfdCBpPTA7IGk8cy5sZW5ndGgoKTsgaSsrKSB7CiAgICAgICAgaWYoc1tpLTFdID09ICcxJyAmJiBzW2ldID09ICcwJykgcmV0Lmluc2VydChwaWkocHJldiwgaS0xKSk7CiAgICAgICAgaWYoc1tpLTFdID09ICcwJyAmJiBzW2ldID09ICcxJykgcHJldiA9IGk7CiAgICB9CiAgICByZXR1cm4gcmV0Owp9CgppbnQgbWFpbigpIHsKICAgIGludCBuLCBxOyBjaW4gPj4gbjsKICAgIHN0cmluZyBzOyBjaW4gPj4gczsKCiAgICBzZXQ8cGlpPiByYW5nZSA9IGluaXQocyk7CiAgICByYW5nZS5pbnNlcnQocGlpKC0xZTksIC0xZTkpKTsKICAgIHJhbmdlLmluc2VydChwaWkoIDFlOSwgIDFlOSkpOwogICAgY2luID4+IHE7CiAgICBmb3IoaW50IGk9MDsgaTxxOyBpKyspIHsKICAgICAgICBpbnQgbCwgciwgYjsgY2luID4+IGwgPj4gciA+PiBiOwogICAgICAgIGwtLTsgci0tOwoKICAgICAgICAvLyDlt6bnq6/jgYwgbCDjgpLotoXjgYjjgarjgYTmnIDlpKfjga7lgKTjgafjgYLjgovljLrplpPjgpLlj5bjgosKICAgICAgICBhdXRvIGl0ID0gcmFuZ2UudXBwZXJfYm91bmQocGlpKGwsMCkpOyBpdC0tOwogICAgICAgIGludCB4ID0gKCppdCkuZmlyc3QsIHkgPSAoKml0KS5zZWNvbmQ7CgogICAgICAgIC8vIOaXouWtmOOBruWMuumWk+OBjOOCr+OCqOODquOBruWMuumWk+OCkuiiq+imhuOBl+OBpuOBhOOCiwogICAgICAgIGlmKHggPD0gbCAmJiByIDw9IHkpIHsKICAgICAgICAgICAgaWYoYiA9PSAwKSB7CiAgICAgICAgICAgICAgICByYW5nZS5lcmFzZShpdCk7CiAgICAgICAgICAgICAgICBpZih4IDw9IGwtMSkgcmFuZ2UuaW5zZXJ0KHBpaSh4LCBsLTEpKTsKICAgICAgICAgICAgICAgIGlmKHIrMSA8PSB5KSByYW5nZS5pbnNlcnQocGlpKHIrMSwgeSkpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIC8vIOaXouWtmOOBruWMuumWk+OBjOOCr+OCqOODquOBruWMuumWk+OCkuiiq+imhuOBl+OBquOBhCAoNCDjgaTjga7lj6/og73mgKfjgYzjgYLjgospCiAgICAgICAgLy8gLT4g44Kv44Ko44Oq44Gu5Yy66ZaT44GM5pei5a2Y44Gu5Yy66ZaT44KS6KKr6KaG44GX44Gm44GE44KLCiAgICAgICAgLy8gLT4g44Kv44Ko44Oq44Gu5Yy66ZaT44GM5pei5a2Y44Gu5Yy66ZaT44Gu5bem5LiA6YOo44KS6KKr6KaG44GX44Gm44GE44KLCiAgICAgICAgLy8gLT4g44Kv44Ko44Oq44Gu5Yy66ZaT44GM5pei5a2Y44Gu5Yy66ZaT44Gu5Y+z5LiA6YOo44KS6KKr6KaG44GX44Gm44GE44KLCiAgICAgICAgLy8gLT4g5pei5a2Y44Gu44Kv44Ko44Oq44Go44Kv44Ko44Oq44Gu5Yy66ZaT44GM5o6l44GX44Gm44GE44KLICgxIOOBq+abtOaWsOOBmeOCi+OBqOOBjeOBq+awl+OCkuOBpOOBkeOBquOBkeOCjOOBsOOBquOCieOBquOBhCkKICAgICAgICBlbHNlIHsKICAgICAgICAgICAgYXV0byBpdDIgPSByYW5nZS5sb3dlcl9ib3VuZChwaWkobCwwKSk7IGl0Mi0tOwogICAgICAgICAgICBpZihiID09IDApIHsKICAgICAgICAgICAgICAgIHdoaWxlKCgqaXQyKS5maXJzdCA8PSByKSB7CiAgICAgICAgICAgICAgICAgICAgeCA9ICgqaXQyKS5maXJzdCwgeSA9ICgqaXQyKS5zZWNvbmQ7CiAgICAgICAgICAgICAgICAgICAgYm9vbCBvayA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgIC8vIOWPs+S4gOmDqAogICAgICAgICAgICAgICAgICAgIGlmKHggPD0gbCAmJiBsIDw9IHkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYoeCA8PSBsLTEpIHJhbmdlLmluc2VydChwaWkoeCwgbC0xKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIG9rID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgLy8g5bem5LiA6YOoCiAgICAgICAgICAgICAgICAgICAgaWYoeCA8PSByICYmIHIgPD0geSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZihyKzEgPD0geSkgcmFuZ2UuaW5zZXJ0KHBpaShyKzEsIHkpKTsKICAgICAgICAgICAgICAgICAgICAgICAgb2sgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAvLyDml6LlrZjjga7ljLrplpPjgpLooqvopoYKICAgICAgICAgICAgICAgICAgICBpZigobCA8PSB4ICYmIHkgPD0gcikgfHwgb2spIHsKICAgICAgICAgICAgICAgICAgICAgICAgaXQyID0gcmFuZ2UuZXJhc2UoaXQyKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzZSBpdDIrKzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIGludCBMID0gbCwgUiA9IHI7CiAgICAgICAgICAgICAgICB3aGlsZSgxKSB7CiAgICAgICAgICAgICAgICAgICAgeCA9ICgqaXQyKS5maXJzdCwgeSA9ICgqaXQyKS5zZWNvbmQ7CiAgICAgICAgICAgICAgICAgICAgLy8g44Gp44Gu44OR44K/44O844Oz44Gn44KC44KE44KL44GT44Go44Gv5aSJ44KP44KJ44Gq44GECiAgICAgICAgICAgICAgICAgICAgYm9vbCBiMSA9ICh4IDw9IEwgJiYgTCA8PSB5KTsKICAgICAgICAgICAgICAgICAgICBib29sIGIyID0gKHggPD0gUiAmJiBSIDw9IHkpOwogICAgICAgICAgICAgICAgICAgIGJvb2wgYjMgPSAoTCA8PSB4ICYmIHkgPD0gUik7CiAgICAgICAgICAgICAgICAgICAgYm9vbCBiNCA9IChMIC0gMSA9PSB5KTsKICAgICAgICAgICAgICAgICAgICBib29sIGI1ID0gKFIgKyAxID09IHgpOwogICAgICAgICAgICAgICAgICAgIGlmKGIxIHx8IGIyIHx8IGIzIHx8IGI0IHx8IGI1KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGl0MiA9IHJhbmdlLmVyYXNlKGl0Mik7CiAgICAgICAgICAgICAgICAgICAgICAgIEwgPSBtaW4oTCwgeCk7CiAgICAgICAgICAgICAgICAgICAgICAgIFIgPSBtYXgoUiwgeSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBpZigoKml0MikuZmlyc3QgPD0gcikgaXQyKys7CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmFuZ2UuaW5zZXJ0KHBpaShMLCBSKSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgY291dCA8PCByYW5nZS5zaXplKCkgLSAyIDw8IGVuZGw7CiAgICB9CiAgICByZXR1cm4gMDsKfQ==