Pagini recente » Istoria paginii runda/cartof123/clasament | Profil DianaEllena | Cod sursa (job #870984) | Cod sursa (job #2177421) | Cod sursa (job #1675113)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
int first(int v[], int lower, int upper, int x)
{
if(lower > upper)
{
return -1;
}
int middle = lower + (upper - lower)/2;
if( (middle == upper && v[middle] == x) || (v[middle] == x && v[middle+1] > x) )
{
return middle;
}
else if(v[middle] <= x)
{
return first(v, middle + 1, upper, x);
}
else {
return first(v, lower, middle - 1, x);
}
}
int second(int v[], int lower, int upper, int x)
{
if(lower > upper)
{
return -1;
}
int middle = lower + (upper - lower)/2;
if( (middle == upper && v[middle] <= x) || (v[middle] <= x && v[middle+1] > x) )
{
return middle;
}
else if(v[middle] <= x)
{
return first(v, middle + 1, upper, x);
}
else {
return first(v, lower, middle - 1, x);
}
}
int third(int v[], int lower, int upper, int x)
{
if(lower > upper)
{
return -1;
}
int middle = lower + (upper - lower)/2;
if( (middle == lower && v[middle] >= x) || (v[middle] >= x && v[middle-1] < x) )
{
return middle;
}
else if(v[middle] < x)
{
return first(v, middle + 1, upper, x);
}
else {
return first(v, lower, middle - 1, x);
}
}
int main()
{
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
int n, m, i;
fin >> n;
int v[n];
for(i = 1; i <= n; ++i)
{
fin >> v[i];
}
fin >> m;
int curr_case, x;
for(i = 1; i<= m; ++i)
{
fin >> curr_case >> x;
cout << curr_case << " " << x << endl;
switch(curr_case)
{
case 0 :
fout << first(v, 1, n, x) << endl;
break;
case 1 :
fout << second(v, 1, n, x) << endl;
break;
case 2:
fout << third(v, 1, n, x) << endl;
break;
default :
return -1;
}
}
}