Pagini recente » Cod sursa (job #747221) | Cod sursa (job #2173626) | Cod sursa (job #2070781) | Cod sursa (job #1654336) | Cod sursa (job #2118441)
#include <iostream>
#include <fstream>
#define MAX 100005
using namespace std;
ifstream in("cautbin.in");
ofstream out("cautbin.out");
long long V[MAX];
int N,NrCerinte;
void Read()
{
in >> N;
for ( int i = 1; i <= N ; ++i)
{
long long x;
in >> x;
V[i] = x;
}
}
void CautBin0(int K)
{
bool OK = false;
int st = 1;
int dr = N;
int IndiceMax;
while( st <= dr )
{
int mij = st + (dr - st)/2;
if(V[mij] == K)
{
OK = true;
IndiceMax = mij;
st = mij+1;
}
else if(V[mij] < K )
st = mij+1;
else dr = mij-1;
}
if(OK == true) out << IndiceMax<<"\n";
else out << -1 <<"\n";
}
void CautBin1(int K)
{
int st = 1;
int dr = N;
int PozMin;
while( st <= dr )
{
int mij = st + (dr-st)/2;
if(V[mij] <= K )
{
PozMin = mij;
st = mij+1;
}
if(V[mij] > K)
dr = mij-1;
}
out << PozMin <<"\n";
}
void CautBin2(int K)
{
int st = 1;
int dr = N;
int PozMin;
while( st <= dr )
{
int mij = st + (dr-st)/2;
if(V[mij] >= K)
{
PozMin = mij;
dr = mij-1;
}
if(V[mij] < K)
st = mij+1;
}
out << PozMin <<"\n";
}
int main()
{
Read();
in >> NrCerinte;
while(NrCerinte)
{
int Type, Number;
in >> Type >> Number;
if(Type == 0 ) CautBin0(Number);
if(Type == 1 ) CautBin1(Number);
if(Type == 2 ) CautBin2(Number);
NrCerinte--;
}
}