#include #include #include using namespace std; int N, M; int ARB[50002 * 4], A1, A2, Av, Ar; void update(int nod, int i1, int i2) { if (A1 <= i1 && i2 <= A2) { ARB[nod] = Av * (i2 - i1 + 1); return; } int mid = (i1 + i2) / 2; if (ARB[nod] != ARB[nod * 2] + ARB[nod * 2 + 1]) { if (ARB[nod] == 0) { ARB[nod * 2] = 0; ARB[nod * 2 + 1] = 0; } else { ARB[nod * 2] = mid - i1 + 1; ARB[nod * 2 + 1] = i2 - mid; } } if (A1 <= mid) update(nod * 2, i1, mid); if (A2 > mid) update(nod * 2 + 1, mid + 1, i2); ARB[nod] = ARB[nod * 2] + ARB[nod * 2 + 1]; } void query(int nod, int i1, int i2) { if (A1 <= i1 && i2 <= A2) { Ar += ARB[nod]; return; } int mid = (i1 + i2) / 2; if (ARB[nod] != ARB[nod * 2] + ARB[nod * 2 + 1]) { if (ARB[nod] == 0) { ARB[nod * 2] = 0; ARB[nod * 2 + 1] = 0; } else { ARB[nod * 2] = mid - i1 + 1; ARB[nod * 2 + 1] = i2 - mid; } } if (A1 <= mid) query(nod * 2, i1, mid); if (A2 > mid) query(nod * 2 + 1, mid + 1, i2); } bool is_sum(int i1, int i2) { A1 = i1, A2 = i2, Ar = 0; query(1, 1, N); if (Ar == i2 - i1 + 1) return true; if (Ar == 0) return true; return false; } int main() { cin.sync_with_stdio(false); cin >> N >> M; for (int i = 1, type; i <= M; ++i) { cin >> type; if (type == 1) { int a, b, c; cin >> a >> b >> c; A1 = a; A2 = b; Av = c; update(1, 1, N); } else { int a; cin >> a; int step = (1 << 16), lf = a, rg = a; for (; step; step >>= 1) if (lf - step >= 1 && is_sum(lf - step, a)) lf -= step; step = (1 << 16); for (; step; step >>= 1) if (rg + step <= N && is_sum(a, rg + step)) rg += step; A1 = a, A2 = a, Ar = 0; query(1, 1, N); cout << Ar << ' ' << lf << ' ' << rg << '\n'; } } }