Pagini recente » Cod sursa (job #826807) | Cod sursa (job #3175977) | Cod sursa (job #429647) | Cod sursa (job #544307) | Cod sursa (job #2620292)
#include <iostream>
#include <fstream>
using namespace std;
int v[100001], n, cb2, cb3;
int cautbin1(int st, int dr, int x)
{
if(st > dr)
return -1;
else
{
int m = st + (dr - st) / 2;
if(v[m] == x)
{
while(v[m+1] == x)
m++;
return m+1;
}
if(v[m] > x)
return cautbin1(st, m - 1, x);
else
return cautbin1(m + 1, dr, x);
}
}
int cautbin2(int st, int dr, int x)
{
if(st > dr)
return cb2;
else
{
int m = st + (dr - st) / 2;
if(v[m] == x)
{
while(v[m+1] == x)
m++;
return m+1;
}
if(v[m] > x)
return cautbin2(st, m - 1, x);
if(v[m] < x)
{
cb2 = m + 1;
return cautbin2(m + 1, dr, x);
}
}
}
int cautbin3(int st, int dr, int x)
{
if(st > dr)
return cb3;
else
{
int m = st + (dr - st) / 2;
if(v[m] == x)
{
while(v[m-1] == x)
m--;
return m+1;
}
if(v[m] > x)
{
cb3 = m + 1;
return cautbin3(st, m - 1, x);
}
if(v[m] < x)
return cautbin3(m + 1, dr, x);
}
}
int main()
{
ifstream f("cautbin.in");
ofstream g("cautbin.out");
f>>n;
int i;
for(i=0; i<n; i++)
f>>v[i];
int m;
f>>m;
for(i=0; i<m; i++)
{
int x, y;
f>>x>>y;
if(x == 0)
g<<cautbin1(0, n-1, y)<<endl;
if(x == 1)
g<<cautbin2(0, n-1, y)<<endl;
if(x == 2)
g<<cautbin3(0, n-1, y)<<endl;
}
return 0;
}