#include<iostream>
using namespace std;
int main( )
{
int L[ ] = { 1 ,3 ,5 ,7 ,4 ,6 ,10 } ;
int S= 7 ;
int H[ 15 ] ;
/*
Construct hash table of M elements where M is the maximum number possible
*/
for ( int i= 0 ; i< 15 ; i++ ) H[ i] = - 1 ;
for ( int i= 0 ; i< S; i++ )
{
int x= L[ i] ;
cout << "\n Now:" << x;
if ( H[ x] ! = - 1 ) continue ;
if ( H[ x- 1 ] ! = - 1 && H[ x+ 1 ] ! = - 1 )
{
cout << "\n Both end-points available" ;
int a= H[ x- 1 ] ;
int b= H[ x+ 1 ] ;
H[ a] = b;
H[ b] = a;
H[ x] = x;
cout << "\n H[" << x<< "]=" << H[ x] ;
}
else if ( H[ x- 1 ] ! = - 1 )
{
cout << "\n Left available" ;
H[ H[ x- 1 ] ] = x;
H[ x] = H[ x- 1 ] ;
cout << "\n H[" << x<< "]=" << H[ x] ;
}
else if ( H[ x+ 1 ] ! = - 1 )
{
cout << "\n Right available" ;
H[ H[ x+ 1 ] ] = x;
H[ x] = H[ x+ 1 ] ;
cout << "\n H[" << x<< "]=" << H[ x] ;
}
else
{
cout << "\n Both end-points NOT available" ;
H[ x] = x;
cout << "\n H[" << x<< "]=" << H[ x] ;
}
}
int res= 0 ;
int l,h;
for ( int i= 0 ; i< S; i++ )
{
int x= L[ i] ;
if ( res< ( H[ x] - x+ 1 ) )
{
res= H[ x] - x+ 1 ;
l= min( x,H[ x] ) ;
h= max( x,H[ x] ) ;
}
}
cout << "\n Length of maximum interval is " << res<< " and it starts from " << l<< " and ends at " << h;
return 0 ;
}
I2luY2x1ZGU8aW9zdHJlYW0+CiAKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAppbnQgbWFpbigpCnsKICAgIGludCBMW109ezEsMyw1LDcsNCw2LDEwfTsKICAgIGludCBTPTc7CiAgICBpbnQgSFsxNV07CiAgICAvKgogICAgIENvbnN0cnVjdCBoYXNoIHRhYmxlIG9mIE0gZWxlbWVudHMgd2hlcmUgTSBpcyB0aGUgbWF4aW11bSBudW1iZXIgcG9zc2libGUKICAgICovCiAgICBmb3IoaW50IGk9MDtpPDE1O2krKylIW2ldPS0xOwogICAgZm9yKGludCBpPTA7aTxTO2krKykKICAgIHsKICAgICAgICAgICAgaW50IHg9TFtpXTsgCiAgICAgICAgICAgIGNvdXQ8PCJcbk5vdzoiPDx4OwogICAgICAgICAgICBpZihIW3hdIT0tMSljb250aW51ZTsKICAgICAgICAgICAgaWYoSFt4LTFdIT0tMSAmJiBIW3grMV0hPS0xKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICBjb3V0PDwiXG5Cb3RoIGVuZC1wb2ludHMgYXZhaWxhYmxlIjsKICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhPUhbeC0xXTsKICAgICAgICAgICAgICAgICAgICAgICAgIGludCBiPUhbeCsxXTsKICAgICAgICAgICAgICAgICAgICAgICAgIEhbYV09YjsKICAgICAgICAgICAgICAgICAgICAgICAgIEhbYl09YTsgCiAgICAgICAgICAgICAgICAgICAgICAgICBIW3hdPXg7IAogICAgICAgICAgICAgICAgICAgICAgICAgY291dDw8IlxuSFsiPDx4PDwiXT0iPDxIW3hdOwogICAgICAgICAgICB9IAogICAgICAgICAgICBlbHNlIGlmKEhbeC0xXSE9LTEpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGNvdXQ8PCJcbkxlZnQgYXZhaWxhYmxlIjsKICAgICAgICAgICAgICAgICAgICAgICAgIEhbSFt4LTFdXT14OwogICAgICAgICAgICAgICAgICAgICAgICAgSFt4XT1IW3gtMV07IAogICAgICAgICAgICAgICAgICAgICAgICAgY291dDw8IlxuSFsiPDx4PDwiXT0iPDxIW3hdOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgaWYoSFt4KzFdIT0tMSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgIGNvdXQ8PCJcblJpZ2h0IGF2YWlsYWJsZSI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgSFtIW3grMV1dPXg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgSFt4XT1IW3grMV07CiAgICAgICAgICAgICAgICAgICAgICAgICAgY291dDw8IlxuSFsiPDx4PDwiXT0iPDxIW3hdOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgewogICAgICAgICAgICAgY291dDw8IlxuQm90aCBlbmQtcG9pbnRzIE5PVCBhdmFpbGFibGUiOwogICAgICAgICAgICAgSFt4XT14OwogICAgICAgICAgICAgY291dDw8IlxuSFsiPDx4PDwiXT0iPDxIW3hdOwogICAgICAgICAgICB9CiAgICB9CiAgICBpbnQgcmVzPTA7CiAgICBpbnQgbCxoOwogICAgZm9yKGludCBpPTA7aTxTO2krKykKICAgIHsKICAgICAgICAgICAgaW50IHg9TFtpXTsKICAgICAgICAgICAgaWYocmVzPChIW3hdLXgrMSkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICByZXM9SFt4XS14KzE7CiAgICAgICAgICAgICAgbD1taW4oeCxIW3hdKTsKICAgICAgICAgICAgICBoPW1heCh4LEhbeF0pOwogICAgICAgICAgICB9CiAgICB9CiAgICBjb3V0PDwiXG5MZW5ndGggb2YgbWF4aW11bSBpbnRlcnZhbCBpcyAiPDxyZXM8PCIgYW5kIGl0IHN0YXJ0cyBmcm9tICI8PGw8PCIgYW5kIGVuZHMgYXQgIjw8aDsKICAgIHJldHVybiAwOwp9