#include #include #include #include #define size (10000000) #define hash(x) (((x)*0x12345u)%(size)) #define uint unsigned int /*struct ww { int key; int pos; }*/ int main() { uint *set = (uint*)malloc( size * sizeof( uint ) ); uint *key = (uint*)malloc( 1000001 * sizeof( uint ) ); uint *end = set; end += size - 1; if( !set || !key ) { printf("mem"); return 1; }; for( ;; ) { uint ks, qs, f, t; scanf( "%u %u", &ks, &qs ); if( !ks && !qs ) return 0; for( uint i = 0; i < ks; i++ ) { scanf( "%u", key + i ); } for( uint j = 0; j < qs; j++ ) { memset( set, 0, size * sizeof( uint ) ); scanf( "%u %u", &f, &t ); t--; for( uint i = f - 1; i <= t; i++ ) { uint n = key[i]; uint *k = set + hash( n ); if( k == set ) printf( "az: %d %d", n, hash( n ) ); uint *start = k; while( *k ) { if( *k == n ) { printf( "%d\n", n ); goto skip; } k++; if( k == start ) return 1; if( k > end ) k = set; } *k = n; } printf("OK\n"); skip: ; } printf("\n"); } }