Pagini recente » Cod sursa (job #2491595) | Cod sursa (job #2410669) | Cod sursa (job #2835409) | Cod sursa (job #2441770) | Cod sursa (job #2192997)
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
int x,*v,n,m,i,y,mid,right,left,sol[10],k=0,b;
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++;
}
}
return 0;
}