func_code_string: #include <bits/stdc++.h>   #pragma GCC optimize( O3 )   using namespace std;   const int MAX = 2e5 + 5;   const long long MAX2 = 11;   const long long MOD = 998244353;   const long long MOD2 = 1000000006;   const long long INF = 2e18;   const int dr[] = {1, 0, -1, 0, 1, 1, -1, -1, 0};   const int dc[] = {0, 1, 0, -1, 1, -1, 1, -1, 0};   const double pi = acos(-1);   const double EPS = 1e-9;   const int block = 316;   int n, q, push_front[MAX], le[MAX], ri[MAX], l[MAX], r[MAX], cl[MAX], jlh[MAX],       cnt, a, b, len, id, ls;   long long hs[MAX], x[MAX], key, tmp, pj, t2;   bool z[MAX], st;   char c;   pair<long long, int> res;   inline pair<long long, int> f(int a, int b) {     if (a > b) return {0, 0};     int len = b - a + 1;     return {x[b] - x[a - 1] * hs[len], len};   }   inline pair<long long, int> comp(int a, int b) {     tmp = pj = st = 0;     if (z[a]) {       if (ri[a] - a + 1 & 1) ++pj;       a = ri[a] + 1;     }     if (z[b]) {       if (b - le[b] + 1 & 1) st = 1;       b = le[b] - 1;     }     if (cl[a] == cl[b]) {       tmp = l[a] + r[b] - jlh[cl[a]];       if (st) tmp *= key;       return {tmp, 1 + pj + st};     }     res = f(cl[a] + 1, cl[b] - 1);     tmp = (l[a] * hs[res.second] + res.first) * key + r[b];     if (st) tmp *= key;     return {tmp, cl[b] - cl[a] + 1 + pj + st};   }   int main() {     ios_base::sync_with_stdio(false);     cin.tie(0);     cout.tie(0);     key = 2000003153;     cin >> n;     hs[0] = 1;     for (int i = 1; i <= n; ++i) {       cin >> c, z[i] = (c ==  1 ), push_front[i] = push_front[i - 1] + z[i],                 hs[i] = hs[i - 1] * key;       if (z[i]) {         st ^= 1;         if (le[i - 1])           le[i] = le[i - 1];         else           le[i] = i;       } else {         if (st) {           jlh[id] = cnt;           x[id] = x[id - 1] * key + cnt;           st = cnt = 0;         }         if (cnt == 0) ++id;         ++cnt, r[i] = cnt;         cl[i] = id;       }     }     if (cnt) x[id] = x[id - 1] * key + cnt, jlh[id] = cnt;     ls = id;     cnt = 0;     for (int i = n; i >= 1; --i) {       if (z[i]) {         if (ri[i + 1])           ri[i] = ri[i + 1];         else           ri[i] = i;       } else {         if (cl[i] != ls) cnt = 0, ls = cl[i];         l[i] = ++cnt;       }     }     cin >> q;     while (q--) {       cin >> a >> b >> len;       if (push_front[a + len - 1] - push_front[a - 1] !=           push_front[b + len - 1] - push_front[b - 1]) {         cout <<  No n ;         continue;       }       if (push_front[a + len - 1] - push_front[a - 1] == 0 ||           push_front[a + len - 1] - push_front[a - 1] == len) {         cout <<  Yes n ;         continue;       }       if (comp(a, a + len - 1) == comp(b, b + len - 1))         cout <<  Yes n ;       else         cout <<  No n ;     }     return 0;   }   