#include #include #include #include #include #include using namespace std; const int Nmax = 50005; struct BUCKET { int sum; int val; int s, d; }; int v[Nmax + 1], apart[Nmax + 1]; BUCKET bucket[400]; int N, Q, SQRTN, LG; void update_sum( int ind ) { bucket[ind].sum = 0; for ( int i = bucket[ind].s; i <= bucket[ind].d; ++i ) bucket[ind].sum += v[i]; } void update_val( int ind ) { if ( bucket[ind].val != -1 ) { for ( int i = bucket[ind].s; i <= bucket[ind].d; ++i ) v[i] = bucket[ind].val; bucket[ind].val = -1; } } void update( int x, int y, int c ) { int apx = apart[x]; int apy = apart[y]; int dr = min( apx * SQRTN, y ); update_val( apx ); for ( int i = x; i <= dr; ++i ) { v[i] = c; } update_sum( apx ); for ( int j = apx + 1; j < apy; ++j ) { bucket[j].val = c; bucket[j].sum = c * ( bucket[j].d - bucket[j].s + 1 ); } int st = max( ( apy - 1 ) * SQRTN + 1, x ); update_val( apy ); for ( int i = st; i <= y; ++i ) { v[i] = c; } update_sum( apy ); } void query( int x ) { int apx = apart[x]; update_val( x ); update_sum( apx ); int fvalue = v[x]; int capat_st = x, capat_dr = x; for ( int j = x; j >= bucket[apx].s; j-- ) { if ( v[j] == fvalue ) { capat_st = j; } else break; } for ( int j = apx - 1; j >= 1; j-- ) { if ( bucket[j].val != -1 ) { if ( bucket[j].val == fvalue ) { capat_st = bucket[j].s; continue; } else { break; } } else { if ( bucket[j].sum == fvalue * ( bucket[j].d - bucket[j].s ) ) { capat_st = bucket[j].s; continue; } else { for ( int i = bucket[j].d; i >= bucket[j].s; i-- ) { if ( v[i] == fvalue ) { capat_st = i; } else break; } break; } } } for ( int j = x; j <= bucket[apx].d; j++ ) { if ( v[j] == fvalue ) { capat_dr = j; } else break; } for ( int j = apx + 1; j < SQRTN; ++j ) { if ( bucket[j].val != -1 ) { if ( bucket[j].val == fvalue ) { capat_dr = bucket[j].d; continue; } else { break; } } else { if ( bucket[j].sum == fvalue * ( bucket[j].d - bucket[j].s ) ) { capat_dr = bucket[j].d; continue; } else { for ( int i = bucket[j].s; i <= bucket[j].d; i++ ) { if ( v[i] == fvalue ) { capat_dr = i; } else break; } break; } } } cout << v[x] << " " << capat_st << " " << capat_dr << "\n"; } int main() { ///ifstream cin("date.in"); cin >> N >> Q; for ( int i = 1; i <= N; ++i ) v[i] = 0; SQRTN = 1; while ( SQRTN * SQRTN < N ) SQRTN++; int j = 1; for ( int i = 1; i <= N; i += ( SQRTN + 1 ) ) { bucket[j].s = bucket[j - 1].d + 1; bucket[j].d = min( bucket[j].s + SQRTN, N ); bucket[j].val = -1; j++; } for ( int i = 1, nrc = 1; i <= N; ++i ) { apart[i] = nrc; if ( i % SQRTN == 0 ) nrc++; } int tip, a, b, c; while ( Q-- ) { cin >> tip; if ( tip == 1 ) { cin >> a >> b >> c; update( a, b, c ); } else { cin >> a; query( a ); } } return 0; }