Pagini recente » Cod sursa (job #170035) | Cod sursa (job #337459) | Cod sursa (job #2570627) | Cod sursa (job #1429679) | Cod sursa (job #2462645)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
int N , M , A[100001];
int Cerinta1(int X)
{
int st = 1, dr = N , pozMax = -1;
while(st <= dr)
{
int m = (st + dr) / 2;
if(A[m] == X)
{
pozMax = m;
st = m + 1;
}
if(A[m] > X)
{
dr = m - 1;
}
if(A[m] < X)
{
st = m + 1;
}
}
return pozMax;
}
int Cerinta2(int X)
{
int st = 1 , dr = N , pozMax;
while(st <= dr)
{
int m = (st + dr) / 2;
if(A[m] <= X)
{
st = m + 1;
pozMax = m;
}
if(A[m] > X)
{
dr = m - 1;
}
if(A[m] < X)
{
st = m + 1;
}
}
return pozMax;
}
int Cerinta3(int X)
{
int st = 1 , dr = N , pozMin;
while(st <= dr)
{
int m = (st + dr) / 2;
if(A[m] < X)
{
st = m + 1;
}
else
{
pozMin = m;
dr = m - 1;
}
}
return pozMin;
}
int main()
{
int i , Cer , Nr;
fin >> N;
for(i = 1 ; i <= N ; i++)
{
fin >> A[i];
}
fin >> M;
for(i = 1 ; i <= M ; i++)
{
fin >> Cer >> Nr;
switch(Cer)
{
case 0 :
fout << Cerinta1(Nr) << "\n";
break;
case 1 :
fout << Cerinta2(Nr) << "\n";
break;
case 2 :
fout << Cerinta3(Nr) << "\n";
break;
}
}
return 0;
}