Pagini recente » Cod sursa (job #2978333) | Cod sursa (job #859308) | Cod sursa (job #2800623) | Monitorul de evaluare | Cod sursa (job #2199456)
#include <iostream>
#include <fstream>
#define NUM 100005
int v[NUM];
int n, m, cod, x;
int st, dr, mij;
using namespace std;
int binar0()
{
st = 0;
dr = n - 1;
mij = st + (dr - st) / 2;
while(st <= dr && v[mij] != x)
{
mij = st + (dr - st) / 2;
if(v[mij] < x)
st = mij + 1;
else
dr = mij - 1;
}
if(v[mij] != x)
return -1;
while(v[mij + 1] == x && mij < n)
mij++;
return mij + 1;
}
int binar1()
{
st = 0;
dr = n - 1;
mij = st + (dr - st) / 2;
while(st <= dr && v[mij] != x)
{
mij = st + (dr - st) / 2;
if(v[mij] < x)
st = mij + 1;
else
dr = mij - 1;
}
while(v[mij + 1] <= x && mij < n)
mij++;
return mij + 1;
}
int binar2()
{
st = 0;
dr = n - 1;
mij = st + (dr - st) / 2;
while(st <= dr && v[mij] != x)
{
mij = st + (dr - st) / 2;
if(v[mij] < x)
st = mij + 1;
else
dr = mij - 1;
}
while(v[mij - 1] >= x && mij > 0)
mij--;
return mij + 1;
}
int main()
{
ifstream f("cautbin.in");
ofstream g("cautbin.out");
f >> n;
for(int i = 0; i < n; ++i)
f >> v[i];
f >> m;
for(int i = 0; i < m; ++i)
{
f >> cod >> x;
switch(cod)
{
case 0:
g << binar0();
break;
case 1:
g << binar1();
break;
case 2:
g << binar2();
break;
}
g << "\n";
}
f.close();
g.close();
}