Pagini recente » Cod sursa (job #1837534) | Cod sursa (job #1680432) | Cod sursa (job #2870891) | Cod sursa (job #1930832) | Cod sursa (job #1557384)
/*
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
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
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
*/
#define nMax 100001
#include <fstream>
using namespace std;
ifstream x ("cautbin.in");
ofstream y ("cautbin.out");
int b; //b=x
int n,m;
int v[nMax];
int case_0(int i, int j)
{
int k=(i+j)/2;
if(v[k]==b)
if(v[k+1]!=b)
return k;
else
return case_0(k,j);
if(i==j)
return -1;
if(v[k]>b)
return case_0(i,k);
else
return case_0(k,j);
}
int case_1(int i, int j)
{
int k=(i+j)/2;
if(v[k]==b)
if(v[k+1]!=b)
return k;
else
return case_1(k,j);
else
if(v[k]<=b)
return case_1(i,k);
else
return case_1(k,j);
}
int case_2(int i, int j)
{
int k=(i+j)/2;
if(v[k]==b)
if(v[k-1]!=b)
return k;
else
return case_2(i,k);
else
if(v[k]<b)
return case_2(k,j);
else
return case_2(i,k);
}
int main()
{
x>>n;
for(int i=1;i<=n;i++)
x>>v[i];
x>>m;
int a;
for(int i=0;i<m;i++)
{
x>>a;
x>>b;
switch(a)
{
case 0:
y<<case_0(1,n)<<'\n';
break;
case 1:
y<<case_1(1,n)<<'\n';
break;
case 2:
y<<case_2(1,n)<<'\n';
break;
}
}
return 0;
}