#include <bits/stdc++.h>
using namespace std;
const int MAXN = 500005;
int sum[4 * MAXN], minPref[4 * MAXN], maxPref[4 * MAXN];
int assign_tag[4 * MAXN]; // 2 = no assignment, 1 = '(', -1 = ')'
bool flip_tag[4 * MAXN];
inline void applyAssign(int node, int val, int len) {
assign_tag[node] = val;
flip_tag[node] = false;
sum[node] = val * len;
if (val == 1) {
minPref[node] = 0;
maxPref[node] = len;
} else {
minPref[node] = -len;
maxPref[node] = 0;
}
}
inline void applyFlip(int node, int len) {
if (assign_tag[node] != 2) {
applyAssign(node, -assign_tag[node], len);
} else {
sum[node] = -sum[node];
int tmp = minPref[node];
minPref[node] = -maxPref[node];
maxPref[node] = -tmp;
flip_tag[node] ^= 1;
}
}
inline void push(int node, int l, int r) {
int mid = (l + r) / 2;
int left = node * 2, right = node * 2 + 1;
if (assign_tag[node] != 2) {
applyAssign(left, assign_tag[node], mid - l + 1);
applyAssign(right, assign_tag[node], r - mid);
assign_tag[node] = 2;
}
if (flip_tag[node]) {
applyFlip(left, mid - l + 1);
applyFlip(right, r - mid);
flip_tag[node] = false;
}
}
inline void pull(int node) {
int left = node * 2, right = node * 2 + 1;
sum[node] = sum[left] + sum[right];
minPref[node] = min(minPref[left], sum[left] + minPref[right]);
maxPref[node] = max(maxPref[left], sum[left] + maxPref[right]);
}
void build(int node, int l, int r, const vector<int>& a) {
assign_tag[node] = 2;
flip_tag[node] = false;
if (l == r) {
int val = a[l - 1];
sum[node] = val;
minPref[node] = min(0, val);
maxPref[node] = max(0, val);
return;
}
int mid = (l + r) / 2;
build(node * 2, l, mid, a);
build(node * 2 + 1, mid + 1, r, a);
pull(node);
}
void updateAssign(int node, int l, int r, int ql, int qr, int val) {
if (ql <= l && r <= qr) {
applyAssign(node, val, r - l + 1);
return;
}
push(node, l, r);
int mid = (l + r) / 2;
if (ql <= mid) updateAssign(node * 2, l, mid, ql, qr, val);
if (qr > mid) updateAssign(node * 2 + 1, mid + 1, r, ql, qr, val);
pull(node);
}
void updateFlip(int node, int l, int r, int ql, int qr) {
if (ql <= l && r <= qr) {
applyFlip(node, r - l + 1);
return;
}
push(node, l, r);
int mid = (l + r) / 2;
if (ql <= mid) updateFlip(node * 2, l, mid, ql, qr);
if (qr > mid) updateFlip(node * 2 + 1, mid + 1, r, ql, qr);
pull(node);
}
struct Node {
int sum, minPref, maxPref;
};
Node query(int node, int l, int r, int ql, int qr) {
if (ql <= l && r <= qr) {
return {sum[node], minPref[node], maxPref[node]};
}
push(node, l, r);
int mid = (l + r) / 2;
if (qr <= mid) return query(node * 2, l, mid, ql, qr);
if (ql > mid) return query(node * 2 + 1, mid + 1, r, ql, qr);
Node left = query(node * 2, l, mid, ql, qr);
Node right = query(node * 2 + 1, mid + 1, r, ql, qr);
Node res;
res.sum = left.sum + right.sum;
res.minPref = min(left.minPref, left.sum + right.minPref);
res.maxPref = max(left.maxPref, left.sum + right.maxPref);
return res;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n, Q;
if (!(cin >> n >> Q)) return 0;
string S;
cin >> S;
vector<int> a(n);
for (int i = 0; i < n; ++i) {
a[i] = (S[i] == '(') ? 1 : -1;
}
build(1, 1, n, a);
while (Q--) {
int L, H;
char c;
cin >> L >> H >> c;
// Cực kỳ quan trọng để tránh Segment Tree bị lặp vô hạn
if (L > H) swap(L, H);
if (c == '?') {
Node res = query(1, 1, n, L, H);
if (res.sum == 0 && res.minPref >= 0)
cout << "yes\n";
else
cout << "no\n";
} else if (c == '(') {
updateAssign(1, 1, n, L, H, 1);
} else if (c == ')') {
updateAssign(1, 1, n, L, H, -1);
} else if (c == '-') {
updateFlip(1, 1, n, L, H);
}
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgpjb25zdCBpbnQgTUFYTiA9IDUwMDAwNTsKCmludCBzdW1bNCAqIE1BWE5dLCBtaW5QcmVmWzQgKiBNQVhOXSwgbWF4UHJlZls0ICogTUFYTl07CmludCBhc3NpZ25fdGFnWzQgKiBNQVhOXTsgICAvLyAyID0gbm8gYXNzaWdubWVudCwgMSA9ICcoJywgLTEgPSAnKScKYm9vbCBmbGlwX3RhZ1s0ICogTUFYTl07CgppbmxpbmUgdm9pZCBhcHBseUFzc2lnbihpbnQgbm9kZSwgaW50IHZhbCwgaW50IGxlbikgewogICAgYXNzaWduX3RhZ1tub2RlXSA9IHZhbDsKICAgIGZsaXBfdGFnW25vZGVdID0gZmFsc2U7CiAgICBzdW1bbm9kZV0gPSB2YWwgKiBsZW47CiAgICBpZiAodmFsID09IDEpIHsKICAgICAgICBtaW5QcmVmW25vZGVdID0gMDsKICAgICAgICBtYXhQcmVmW25vZGVdID0gbGVuOwogICAgfSBlbHNlIHsKICAgICAgICBtaW5QcmVmW25vZGVdID0gLWxlbjsKICAgICAgICBtYXhQcmVmW25vZGVdID0gMDsKICAgIH0KfQoKaW5saW5lIHZvaWQgYXBwbHlGbGlwKGludCBub2RlLCBpbnQgbGVuKSB7CiAgICBpZiAoYXNzaWduX3RhZ1tub2RlXSAhPSAyKSB7CiAgICAgICAgYXBwbHlBc3NpZ24obm9kZSwgLWFzc2lnbl90YWdbbm9kZV0sIGxlbik7CiAgICB9IGVsc2UgewogICAgICAgIHN1bVtub2RlXSA9IC1zdW1bbm9kZV07CiAgICAgICAgaW50IHRtcCA9IG1pblByZWZbbm9kZV07CiAgICAgICAgbWluUHJlZltub2RlXSA9IC1tYXhQcmVmW25vZGVdOwogICAgICAgIG1heFByZWZbbm9kZV0gPSAtdG1wOwogICAgICAgIGZsaXBfdGFnW25vZGVdIF49IDE7CiAgICB9Cn0KCmlubGluZSB2b2lkIHB1c2goaW50IG5vZGUsIGludCBsLCBpbnQgcikgewogICAgaW50IG1pZCA9IChsICsgcikgLyAyOwogICAgaW50IGxlZnQgPSBub2RlICogMiwgcmlnaHQgPSBub2RlICogMiArIDE7CiAgICBpZiAoYXNzaWduX3RhZ1tub2RlXSAhPSAyKSB7CiAgICAgICAgYXBwbHlBc3NpZ24obGVmdCwgYXNzaWduX3RhZ1tub2RlXSwgbWlkIC0gbCArIDEpOwogICAgICAgIGFwcGx5QXNzaWduKHJpZ2h0LCBhc3NpZ25fdGFnW25vZGVdLCByIC0gbWlkKTsKICAgICAgICBhc3NpZ25fdGFnW25vZGVdID0gMjsKICAgIH0KICAgIGlmIChmbGlwX3RhZ1tub2RlXSkgewogICAgICAgIGFwcGx5RmxpcChsZWZ0LCBtaWQgLSBsICsgMSk7CiAgICAgICAgYXBwbHlGbGlwKHJpZ2h0LCByIC0gbWlkKTsKICAgICAgICBmbGlwX3RhZ1tub2RlXSA9IGZhbHNlOwogICAgfQp9CgppbmxpbmUgdm9pZCBwdWxsKGludCBub2RlKSB7CiAgICBpbnQgbGVmdCA9IG5vZGUgKiAyLCByaWdodCA9IG5vZGUgKiAyICsgMTsKICAgIHN1bVtub2RlXSA9IHN1bVtsZWZ0XSArIHN1bVtyaWdodF07CiAgICBtaW5QcmVmW25vZGVdID0gbWluKG1pblByZWZbbGVmdF0sIHN1bVtsZWZ0XSArIG1pblByZWZbcmlnaHRdKTsKICAgIG1heFByZWZbbm9kZV0gPSBtYXgobWF4UHJlZltsZWZ0XSwgc3VtW2xlZnRdICsgbWF4UHJlZltyaWdodF0pOwp9Cgp2b2lkIGJ1aWxkKGludCBub2RlLCBpbnQgbCwgaW50IHIsIGNvbnN0IHZlY3RvcjxpbnQ+JiBhKSB7CiAgICBhc3NpZ25fdGFnW25vZGVdID0gMjsKICAgIGZsaXBfdGFnW25vZGVdID0gZmFsc2U7CiAgICBpZiAobCA9PSByKSB7CiAgICAgICAgaW50IHZhbCA9IGFbbCAtIDFdOwogICAgICAgIHN1bVtub2RlXSA9IHZhbDsKICAgICAgICBtaW5QcmVmW25vZGVdID0gbWluKDAsIHZhbCk7CiAgICAgICAgbWF4UHJlZltub2RlXSA9IG1heCgwLCB2YWwpOwogICAgICAgIHJldHVybjsKICAgIH0KICAgIGludCBtaWQgPSAobCArIHIpIC8gMjsKICAgIGJ1aWxkKG5vZGUgKiAyLCBsLCBtaWQsIGEpOwogICAgYnVpbGQobm9kZSAqIDIgKyAxLCBtaWQgKyAxLCByLCBhKTsKICAgIHB1bGwobm9kZSk7Cn0KCnZvaWQgdXBkYXRlQXNzaWduKGludCBub2RlLCBpbnQgbCwgaW50IHIsIGludCBxbCwgaW50IHFyLCBpbnQgdmFsKSB7CiAgICBpZiAocWwgPD0gbCAmJiByIDw9IHFyKSB7CiAgICAgICAgYXBwbHlBc3NpZ24obm9kZSwgdmFsLCByIC0gbCArIDEpOwogICAgICAgIHJldHVybjsKICAgIH0KICAgIHB1c2gobm9kZSwgbCwgcik7CiAgICBpbnQgbWlkID0gKGwgKyByKSAvIDI7CiAgICBpZiAocWwgPD0gbWlkKSB1cGRhdGVBc3NpZ24obm9kZSAqIDIsIGwsIG1pZCwgcWwsIHFyLCB2YWwpOwogICAgaWYgKHFyID4gbWlkKSB1cGRhdGVBc3NpZ24obm9kZSAqIDIgKyAxLCBtaWQgKyAxLCByLCBxbCwgcXIsIHZhbCk7CiAgICBwdWxsKG5vZGUpOwp9Cgp2b2lkIHVwZGF0ZUZsaXAoaW50IG5vZGUsIGludCBsLCBpbnQgciwgaW50IHFsLCBpbnQgcXIpIHsKICAgIGlmIChxbCA8PSBsICYmIHIgPD0gcXIpIHsKICAgICAgICBhcHBseUZsaXAobm9kZSwgciAtIGwgKyAxKTsKICAgICAgICByZXR1cm47CiAgICB9CiAgICBwdXNoKG5vZGUsIGwsIHIpOwogICAgaW50IG1pZCA9IChsICsgcikgLyAyOwogICAgaWYgKHFsIDw9IG1pZCkgdXBkYXRlRmxpcChub2RlICogMiwgbCwgbWlkLCBxbCwgcXIpOwogICAgaWYgKHFyID4gbWlkKSB1cGRhdGVGbGlwKG5vZGUgKiAyICsgMSwgbWlkICsgMSwgciwgcWwsIHFyKTsKICAgIHB1bGwobm9kZSk7Cn0KCnN0cnVjdCBOb2RlIHsKICAgIGludCBzdW0sIG1pblByZWYsIG1heFByZWY7Cn07CgpOb2RlIHF1ZXJ5KGludCBub2RlLCBpbnQgbCwgaW50IHIsIGludCBxbCwgaW50IHFyKSB7CiAgICBpZiAocWwgPD0gbCAmJiByIDw9IHFyKSB7CiAgICAgICAgcmV0dXJuIHtzdW1bbm9kZV0sIG1pblByZWZbbm9kZV0sIG1heFByZWZbbm9kZV19OwogICAgfQogICAgcHVzaChub2RlLCBsLCByKTsKICAgIGludCBtaWQgPSAobCArIHIpIC8gMjsKICAgIAogICAgaWYgKHFyIDw9IG1pZCkgcmV0dXJuIHF1ZXJ5KG5vZGUgKiAyLCBsLCBtaWQsIHFsLCBxcik7CiAgICBpZiAocWwgPiBtaWQpIHJldHVybiBxdWVyeShub2RlICogMiArIDEsIG1pZCArIDEsIHIsIHFsLCBxcik7CiAgICAKICAgIE5vZGUgbGVmdCA9IHF1ZXJ5KG5vZGUgKiAyLCBsLCBtaWQsIHFsLCBxcik7CiAgICBOb2RlIHJpZ2h0ID0gcXVlcnkobm9kZSAqIDIgKyAxLCBtaWQgKyAxLCByLCBxbCwgcXIpOwogICAgTm9kZSByZXM7CiAgICByZXMuc3VtID0gbGVmdC5zdW0gKyByaWdodC5zdW07CiAgICByZXMubWluUHJlZiA9IG1pbihsZWZ0Lm1pblByZWYsIGxlZnQuc3VtICsgcmlnaHQubWluUHJlZik7CiAgICByZXMubWF4UHJlZiA9IG1heChsZWZ0Lm1heFByZWYsIGxlZnQuc3VtICsgcmlnaHQubWF4UHJlZik7CiAgICByZXR1cm4gcmVzOwp9CgppbnQgbWFpbigpIHsKICAgIGlvczo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsKICAgIGNpbi50aWUobnVsbHB0cik7CgogICAgaW50IG4sIFE7CiAgICBpZiAoIShjaW4gPj4gbiA+PiBRKSkgcmV0dXJuIDA7CiAgICBzdHJpbmcgUzsKICAgIGNpbiA+PiBTOwogICAgdmVjdG9yPGludD4gYShuKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgKytpKSB7CiAgICAgICAgYVtpXSA9IChTW2ldID09ICcoJykgPyAxIDogLTE7CiAgICB9CiAgICBidWlsZCgxLCAxLCBuLCBhKTsKICAgIAogICAgd2hpbGUgKFEtLSkgewogICAgICAgIGludCBMLCBIOwogICAgICAgIGNoYXIgYzsKICAgICAgICBjaW4gPj4gTCA+PiBIID4+IGM7CiAgICAgICAgCiAgICAgICAgLy8gQ+G7sWMga+G7syBxdWFuIHRy4buNbmcgxJHhu4MgdHLDoW5oIFNlZ21lbnQgVHJlZSBi4buLIGzhurdwIHbDtCBo4bqhbgogICAgICAgIGlmIChMID4gSCkgc3dhcChMLCBIKTsgCiAgICAgICAgCiAgICAgICAgaWYgKGMgPT0gJz8nKSB7CiAgICAgICAgICAgIE5vZGUgcmVzID0gcXVlcnkoMSwgMSwgbiwgTCwgSCk7CiAgICAgICAgICAgIGlmIChyZXMuc3VtID09IDAgJiYgcmVzLm1pblByZWYgPj0gMCkKICAgICAgICAgICAgICAgIGNvdXQgPDwgInllc1xuIjsKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgY291dCA8PCAibm9cbiI7CiAgICAgICAgfSBlbHNlIGlmIChjID09ICcoJykgewogICAgICAgICAgICB1cGRhdGVBc3NpZ24oMSwgMSwgbiwgTCwgSCwgMSk7CiAgICAgICAgfSBlbHNlIGlmIChjID09ICcpJykgewogICAgICAgICAgICB1cGRhdGVBc3NpZ24oMSwgMSwgbiwgTCwgSCwgLTEpOwogICAgICAgIH0gZWxzZSBpZiAoYyA9PSAnLScpIHsKICAgICAgICAgICAgdXBkYXRlRmxpcCgxLCAxLCBuLCBMLCBIKTsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gMDsKfQ==