#include #include #include using namespace std; template struct treap{ struct item{ T element; int priority,times,size; item *left,*right; item(const T& x=T()) : element( x ), priority( rand() ), times(1), size(1){} }*root,*NullNode; void rotateLeft( item*& k2 ){ item *k1 = k2->left; k2->left = k1->right; k1->right = k2; k2 = k1; } void rotateRight( item*& k1 ){ item *k2 = k1->right; k1->right = k2->left; k2->left = k1; k1 = k2; } void insert( item*& i, const T& x ){ if( i == NullNode ){ i = new item(x); i->left = i->right = NullNode; } else if( x < i->element ){ insert( i->left, x ); if( i->left->priority < i->priority ) rotateLeft(i); } else if( i->element < x ){ insert( i->right, x ); if( i->right->priority < i->priority ) rotateRight(i); } else ++i->times; resize( i->left ); resize( i->right ); resize( i ); } void remove( item*& i, const T& x ){ if( i == NullNode ) return; if( x < i->element ) remove( i->left, x); else if( i->element < x ) remove( i->right, x); else if( --i->times <= 0 ){ item* todel = 0; if( i->left == NullNode ){ todel = i; i = i->right; } else if( i->right == NullNode ){ todel = i; i = i->left; } else{ item*& j = i->left; i->element = j->element; i->times = j->times; j->times = 0; remove( j, j->element ); } delete todel; } resize( i->left ); resize( i->right ); resize( i ); } void resize( item* i ){ i->size = i->left->size + i->right->size + i->times; } item* select( item* i, int n ){ if( i->left->size < n ){ if( i->left->size + i->times >= n ) return i; return select( i->right, n - i->left->size - i->times ); } return select( i->left, n ); } int rank( item* i, const T& x ){ if( x < i->element ) return rank( i->left, x ); if( i->element < x ) return rank( i->right, x ) + i->left->size + i->times; return i->left->size + 1; } treap(){ NullNode = new item(); root = NullNode->left = NullNode->right = NullNode; NullNode->size = NullNode->times = 0; NullNode->priority = (~0)>>1; } void insert( const T& x ){ insert( root, x ); } void remove( const T& x ){ remove( root, x ); } const T& select( int n ){ return select( root, n )->element; } int rank( const T& x ){ return rank( root, x ); } const T& findMin(){ item* i; for( i = root; i->left != NullNode; i = i->left ); return i->element; } const T& findMax(){ item* i; for( i = root; i->right != NullNode; i = i->right ); return i->element; } }; int main(){ int max=-1,num=1; int N,K; scanf("%d%d",&N,&K); for(int i=1;i<=K;++i){ treap Treap; int now=0; for(int j=0;jmax){ max=now; num=i; } } printf("%d\n",num); }