//Problem #D from Codeforces mindcode #include #include #include #include #include using namespace std; #ifdef __APPLE__ #define DEBUG 1 #else #define DEBUG 0 #endif #define fi first #define se second #define int64 long long int el[250][220]; int nr[2][250]; ifstream in("date.in"); ofstream out("date.out"); void check(int ind) { if (nr[0][ind] == 220 or nr[1][ind] == 220) { int e = (nr[0][ind] == 220) ? (0) : (1); for (int i = 0; i < 220; ++i) el[ind][i] = e; } } int get_el(int ind) { if (nr[0][ind / 220] == 220 or nr[1][ind / 220] == 220) { int e = (nr[0][ind / 220] == 220) ? (0) : (1); return e; } return el[ind / 220][ind % 220]; } int get_el(int a, int b) { return get_el(a * 220 + b); } int main() { int n, m; in >> n >> m; for (int i = 0; (i + 1) * 220 <= n; ++i) nr[0][i] = 220; nr[0][(n - 1) / 220] = ((n - 1) % 220) + 1; while (m--) { int t; in >> t; if (t == 1) { int a, b, c; in >> a >> b >> c; a--; b--; int A = a / 220; int B = b / 220; for (int i = A + 1; i < B; ++i) { nr[c][i] = 220; nr[c ^ 1][i] = 0; } if (A == B) { check(A); for (int i = a % 220; i <= b % 220; ++i) { nr[el[A][i]][A]--; nr[c][A]++; el[A][i] = c; } } else { check(A); for (int i = a % 220; i < 220; ++i) { nr[el[A][i]][A]--; nr[c][A]++; el[A][i] = c; } check(B); for (int i = 0; i <= b % 220; ++i) { nr[el[B][i]][B]--; nr[c][B]++; el[B][i] = c; } } } else { int x; in >> x; x--; int X = x / 220; int c = get_el(x); int st = X - 1, dr = X + 1; for (; st >= 0 and nr[c][st] == 220; --st) ; for (; dr <= n / 220 and nr[c][dr] == 220; ++dr) ; int c_st, c_dr; for (c_st = x % 220; c_st >= 0 and get_el(X, c_st) == c; --c_st) ; for (c_dr = x % 220; c_dr < 220 and get_el(X, c_dr) == c; ++c_dr) ; // cerr << st << '\t' << X << '\t' << dr << '\n'; // cerr << nr[c][dr] << '\n'; int rez_st, rez_dr; if (c_st == -1) { for (c_st = 219; c_st >= 0 and get_el(st, c_st) == c; --c_st) ; rez_st = (c_st + 1) + st * 220 + 1; } else { rez_st = (c_st + 1) + X * 220 + 1; } if (c_dr == 220) { if (X == (n - 1) / 220) { rez_dr = n; } else { for (c_dr = 0; c_dr < 220 and get_el(dr, c_dr) == c; ++c_dr) ; rez_dr = (c_dr - 1) + dr * 220 + 1; } } else { rez_dr = (c_dr - 1) + X * 220 + 1; } rez_dr = min(rez_dr, n); rez_st = max(1, rez_st); out << c << ' ' << rez_st << ' ' << rez_dr << '\n'; } // for (int i = 0; i < n; ++i) // cerr << el[0][i] << ' '; // cerr << '\n' << nr[0][0] << '\t' << nr[1][0] << '\n'; } in.close(); out.close(); return 0; }