Responsive Ads Here
Showing posts with label Binary Search. Show all posts
Showing posts with label Binary Search. Show all posts

Tuesday, 20 June 2017

Find Smallest Missing in Sorted

problem id:--http://practice.geeksforgeeks.org/problems/find-smallest-missing-in-sorted/0

code:--

#include <bits/stdc++.h>

using namespace std;
#define ll   long long
#define      pii               std::pair<int,int>
#define      vi                std::vector<int>
#define      vll               std::vector<long long>
#define      mp(a,b)           make_pair(a,b)
#define      pb(a)             push_back(a)
#define sc(x)   scanf("%d",&x)
#define scll(x)   scanf("%lld",&x)
#define sc2(x,y)   scanf("%d%d",&x,&y)
#define sc3(x,y,z)   scanf("%d%d%d",&x,&y,&z)
#define     pf(x)   printf("%d ",x)
#define     pf2(x,y)   printf("%d %d ",x,y)
#define     pf3(x,y,z)   printf("%d %d %d ",x,y,z)
#define pfnl()   putchar('\n');
#define      each(it,s)        for(auto it = s.begin(); it != s.end(); ++it)
#define      rep(i, n)         for(int i = 0; i < (n); ++i)
#define rep2(i,j,n)   for(int i = j; i < (n); ++i)
#define      fill(a)           memset(a, 0, sizeof (a))
#define      sortA(v)          sort(v.begin(), v.end())
#define      sortD(v)          sort(v.begin(), v.end(), greater<auto>())
#define      X                 first
#define      Y                 second

#define debug(x) cerr<<"debug->"<<#x<<"::"<<x<<endl
#define debug2(x,y) cerr<<#x<<" :: "<<x<<"\t"<<#y<<" :: "<<y<<"\n"
#define debug3(x,y,z) cerr<<#x<<" :: "<<x<<"\t"<<#y<<" :: "<<y<<"\t"<<#z<<" :: "<<z<<"\n"
#define MOD 1000000007

int binary(int a[],int n,int m){
int mid,l=0,r=n-1;
while(l<=r){
mid=(l+r)/2;
if(a[mid]==mid && a[mid+1]!=mid+1) return mid+1;
                //we want  to find an element upto which a[mid]=mid and then the next element is our answer
if(a[mid]==mid) l=mid+1;
else r=mid-1;
}
return mid;
}

int main(int argc, char **argv) {
//std::ios::sync_with_stdio(false);
int arr[1005];
int t;
sc(t);
while(t--)
{
int n,m;
sc2(n,m);
rep(i,n) sc(arr[i]);
int ans;
if(arr[0]) ans=0;
else if(arr[n-1]==n-1)  ans=n;
    else ans=binary(arr,n,m);
pf(ans);
pfnl();
}
return 0;
}