Pagini recente » Cod sursa (job #2122866) | Cod sursa (job #1035134) | Cod sursa (job #2752721) | Cod sursa (job #665566) | Cod sursa (job #2246589)
#include <iostream>
#include <fstream>
using namespace std;
struct intrebare{
int tip, nr;
};
ifstream f("cautbin.in");
ofstream g("cautbin.out");
int n, a[10001], x, m;
intrebare intr[10001];
int cautBin1(int st, int dr,int x)
{
if(st >= dr) return -1;
int m = st + (st + dr) / 2;
if(x == a[m]) return m;
if(x > a[m])
return cautBin1(m + 1, dr , x);
else return cautBin1(st, m - 1, x);
}
int cautBin2(int st, int dr,int x)
{
if(st >= dr) return -1;
int m = st + (st + dr) / 2;
if(x == a[m]) {
if(a[m - 1] == a[m])
return m;
else return m-1;
}
if(x > a[m])
return cautBin2(m + 1, dr , x);
else return cautBin2(st, m - 1, x);
}
int cautBin3(int st, int dr,int x)
{
if(st >= dr) return -1;
int m = st + (st + dr) / 2;
if(x == a[m]) {
if(a[m - 1] == a[m])
{
while(a[m - 1] == a[m])
{
m--;
}
return m;
}
else return m-1;
}
if(x > a[m])
return cautBin3(m + 1, dr , x);
else return cautBin3(st, m - 1, x);
}
void rezolvare(int tip, int nr)
{
if(tip == 0)
g<<cautBin1(1, n, nr)<<'\n';
if(tip == 1)
g<<cautBin2(1, n, nr)<<'\n';
if(tip == 2)
g<<cautBin3(1, n, nr)<<'\n';
//g<<cautBin3(1, n, nr)<<'\n';
}
int main()
{
f>>n;
for(int i = 1; i <=n; i++)
f>>a[i];
f>>m;
for(int i = 1; i <= m; i++)
{
f>>intr[i].tip>>intr[i].nr;
}
for(int i = 1; i <= m; i++)
rezolvare(intr[i].tip, intr[i].nr);
return 0;
}