#include #include #include #include #include #include #include #include #include #define maxdim 50005 using namespace std; int n,m; int ad[4*maxdim],valad[4*maxdim],arb[4*maxdim]; inline void propaga ( const int &nod , const int &st , const int &dr ){ if ( !ad[nod] ) return ; int mij = (st+dr)>>1; int nodst = nod<<1; int noddr = nodst|1; ad[nod] = 0; ad[nodst] = ad[noddr] = 1; valad[nodst] = valad[noddr] = valad[nod]; arb[nodst] = (mij-st+1)*valad[nod]; arb[noddr] = (dr-mij)*valad[nod]; } void update ( int nod , int st , int dr , int a , int b , int val ){ if ( a <= st && dr <= b ){ ad[nod] = 1; valad[nod] = val; arb[nod] = val*(dr-st+1); return ; } propaga(nod,st,dr); int mij = (st+dr)>>1; int nodst = nod<<1; int noddr = nodst|1; if ( a <= mij ){ update(nodst,st,mij,a,b,val); } if ( b > mij ){ update(noddr,mij+1,dr,a,b,val); } arb[nod] = arb[nodst]+arb[noddr]; } void query ( int nod , int st , int dr , int a , int b , int &s ){ if ( a <= st && dr <= b ){ s += arb[nod]; return ; } propaga(nod,st,dr); int mij = (st+dr)>>1; int nodst = nod<<1; int noddr = nodst|1; if ( a <= mij ){ query(nodst,st,mij,a,b,s); } if ( b > mij ){ query(noddr,mij+1,dr,a,b,s); } arb[nod] = arb[nodst]+arb[noddr]; } int main () { #ifndef ONLINE_JUDGE freopen("mindcoding3.in","r",stdin); freopen("mindcoding3.out","w",stdout); #endif scanf("%d %d",&n,&m); for ( int i = 1 ; i <= m ; ++i ){ int tip; scanf("%d",&tip); if ( tip == 1 ){ int a,b,val; scanf("%d %d %d",&a,&b,&val); update(1,1,n,a,b,val); } else{ int x; scanf("%d",&x); int val = 0; query(1,1,n,x,x,val); printf("%d ",val); int left = 1,middle,right = x; while ( left <= right ){ middle = (left+right)>>1; int snow = 0; query(1,1,n,middle,x,snow); if ( snow == val*(x-middle+1) ){ right = middle-1; } else{ left = middle+1; } } printf("%d ",left); left = x,right = n; while ( left <= right ){ middle = (left+right)>>1; int snow = 0; query(1,1,n,x,middle,snow); if ( snow == val*(middle-x+1) ){ left = middle+1; } else{ right = middle-1; } } printf("%d\n",right); } } return 0; }