Cod sursa(job #2192996)
Utilizator | Data | 8 aprilie 2018 09:20:22 | |
---|---|---|---|
Problema | Cautare binara | Scor | 0 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 2.55 kb |
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
void cautarebinara()
{
int x,*v,n,m,i,y,mid,right,left,sol[10],k=0;
ifstream in("cautbin.in");
ofstream out("cautbin.out");
in>>n;
v=(int*)malloc(n*sizeof(int));
for(i=0; i<n; i++)
in>>v[i];
in>>m;
while(m!=0)
{
in>>y;
in>>x
if(y==0)
{
//pozitia cea mai mare a unui element
left=0;
right=n;
mid=n/2;
b=0;
while(left<=right)
{
mid=(Left+Right)/2;
while(v[mid]==x)
mid++;
if(v[mid]==x)
{
break;
b=1;
}
if(v[mid] > x)
right=mid - 1;
if(v[mid] < x)
left=mid+1;
}
if(b==1)
sol[k]=mid;
else sol[k]=-1;
out<<sol[k];
k++;
}
if(y==1)
{
//pozitia cea mai mare a unui element mai mica sau egala cu x
left=0;
right=n;
mid=n/2;
b=0;
while(left<=right)
{
mid=(Left+Right)/2;
while(v[mid]==x)
mid++;
if(v[mid]==x)
{
break;
b=1;
}
if(v[mid] > x)
right=mid - 1;
if(v[mid] < x)
left=mid+1;
}
if(b==1)
sol[k]=mid;
else sol[k]=left;
out<<sol[k];
k++;
}
if(y==2)
{
//pozitia cea mai mica a unui element mai mica sau egalcu x
left=0;
right=n;
b=0;
while(left<=right)
{
mid=(Left+Right)/2;
while(v[mid]==x)
mid++;
if(v[mid]==x)
{
break;
b=1;
}
if(v[mid] > x)
right=mid - 1;
if(v[mid] < x)
left=mid+1;
}
if(b==1)
sol[k]=mid;
else sol[k]=right;
out<<sol[k];
k++;
}
}
int main()
{
cautarebinara();
}