Pagini recente » Cod sursa (job #2549412) | Cod sursa (job #2017801) | Cod sursa (job #908077) | Cod sursa (job #971452) | Cod sursa (job #1058713)
#include <iostream>
#include<fstream>
using namespace std;
ifstream f("cautbin.in");
ofstream g("cautbin.out");
int v[100000];
void cautbin1(int low, int high, int x)
{ //0 x - cea mai mare pozitie pe care se afla un element cu valoarea x
//sau -1 daca aceasta valoare nu se gaseste in sir
int mid,ok=0;
while(low<=high)
{
mid=low+(high-low)/2;
if(v[mid]<=x)
low=mid+1;
else
high=mid-1;
}
mid=low+(high-low)/2;
if(v[mid]>x)
mid--;
if(v[mid]==x)
{
g<<mid<<endl;
ok=1;
}
if(ok==0)
g<<-1<<endl;
}
/*1 x - cea mai mare pozitie pe care se afla un
element cu valoarea mai mica sau egala cu x in sir. Se garanteaza ca
cel mai mic numar al sirului este mai mic sau egal decat x */
void cautbin2(int low, int high, int x)
{
int mid;
while(low<high)
{
mid=low+(high-low)/2;
if(v[mid]<=x)
low=mid+1;
else
high=mid;
}
mid=low+(high-low)/2;
if(v[mid]>x)
mid--;
g<<mid<<endl;
}
/*2 x - cea mai mica pozitie pe care se afla un element cu valoarea
mai mare sau egala cu x in sir. Se garanteaza ca
cel mai mare numar din sir este mai mare sau egal decat x*/
void cautbin3(int low, int high, int x)
{
int mid;
while(low<high)
{
mid=low+(high-low)/2;
if(v[mid]<x)
low=mid+1;
else
high=low;
}
mid=low+(high-low)/2;
if(v[mid]<x)
mid++;
g<<mid<<endl;
}
int main()
{
int n,i,nr_i,x,y;
f>>n;
for(i=1;i<=n;i++)
f>>v[i];
f>>nr_i;
for(i=1;i<=nr_i;i++)
{
f>>x;
f>>y;
if(x==0)
cautbin1(1,n,y);
if(x==1)
cautbin2(1,n,y);
if(x==2)
cautbin3(1,n,y);
}
return 0;
}