int kthlargest(vector<int>&nums,int k,int l,int r)
 {
    // cout<<l<<" "<<r<<" "<<k<<"\n";
     if(k>0&&k<=r-l+1)
     {
     int pos=randompartition(nums,l,r);
   //  cout<<pos<<"\n";
     if(pos-l==k-1)
         return nums[pos];
     if(pos-l>k-1)
         return kthlargest(nums,k,l,pos-1);
     return kthlargest(nums,k-pos+l-1,pos+1,r);
     }
     return INT_MAX;
 }
// Return pointer to the kth largest
Node* kthlargest(Node* root, int &k)
{
	if( root == NULL )
		return NULL;
	else
	{
		Node* result = kthlargest(root->right, int k);
		if( result )
			return result;
		k--;
		if( k == 0 )
			return root;
		return kthlargest(root->left, k);
	}
}
 int findKthLargest(vector<int>& nums, int k) {
    //to find kth smallest change nums.size()-k+1===>k
    int ans=kthlargest(nums,nums.size()-k+1,0,nums.size());
     return ans;
 }