Pagini recente » Cod sursa (job #1901347) | Cod sursa (job #714287) | Cod sursa (job #2577398) | Cod sursa (job #584395) | Cod sursa (job #2659116)
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#include <set>
#include <algorithm>
#include <list>
#include <map>
#include <math.h>
#define NMAX 100001
using namespace std;
ifstream f("cautbin.in");
ofstream g("cautbin.out");
vector<int> v(NMAX);
int n;
int cautare_binara1(int st , int dr , int val)
{
if(st > dr)
return -1;
else
{
int mij = st +(dr-st)/2;
if(v[mij] == val)
{
while(v[mij] == val)mij++;
return mij-1;
}
else if(v[mij] > val)return cautare_binara1(st , mij , val);
else return cautare_binara1(mij+1,dr,val);
}
}
int cautare_binara2(int st , int dr , int val)
{
if(st >= dr)
{
int mij = st + (dr -st) /2;
if(v[mij] > val)mij--;
return mij;
}
else
{
int mij = (st + dr) / 2;
if(v[mij] <= val)return cautare_binara2(mij+1, dr, val);
else return cautare_binara2(st, mij, val);
}
}
int cautare_binara3(int st, int dr , int val)
{
if(st >= dr) {
int mij = st + (dr - st)/2;
if(v[mij] < val)mij++;
return mij;
}
else
{
int mij = st + (dr - st) / 2;
if(v[mij] < val)return cautare_binara3(mij+1, dr, val);
else return cautare_binara3(st, mij,val);
}
}
int main() {
int n;
f>>n;
for(int i=1;i<=n;i++)
{
f>>v[i];
}
int m;
f>>m;
for(int i=1;i<=m;i++)
{
int a , b;
f>>a>>b;
if(a==0)g<<cautare_binara1(1, n, b)<<'\n';
else if(a==1)g<<cautare_binara2(1,n,b)<<'\n';
else g<<cautare_binara3(1,n,b)<<'\n';
}
return 0;
}