Mai intai trebuie sa te autentifici.
Cod sursa(job #2626022)
| Utilizator | Data | 6 iunie 2020 11:28:19 | |
|---|---|---|---|
| Problema | Cautare binara | Scor | 100 |
| Compilator | cpp-64 | Status | done |
| Runda | Arhiva educationala | Marime | 1.81 kb |
#include <iostream>
#include <fstream>
using namespace std;
int v[100001], n, cb2, cb3;
int cautbin1(int st, int dr, int x)
{
if(st > dr)
return -1;
else
{
int m = st + (dr - st) / 2;
if(v[m] == x)
{
while(v[m+1] == x)
m++;
return m+1;
}
if(v[m] > x)
return cautbin1(st, m - 1, x);
else
return cautbin1(m + 1, dr, x);
}
}
int cautbin2(int st, int dr, int x)
{
if(st > dr)
return cb2;
else
{
int m = st + (dr - st) / 2;
if(v[m] == x)
{
while(v[m+1] == x)
m++;
return m+1;
}
if(v[m] > x)
return cautbin2(st, m - 1, x);
if(v[m] < x)
{
cb2 = m + 1;
return cautbin2(m + 1, dr, x);
}
}
}
int cautbin3(int st, int dr, int x)
{
if(st > dr)
return cb3;
else
{
int m = st + (dr - st) / 2;
if(v[m] == x)
{
while(v[m-1] == x)
m--;
return m+1;
}
if(v[m] > x)
{
cb3 = m + 1;
return cautbin3(st, m - 1, x);
}
if(v[m] < x)
return cautbin3(m + 1, dr, x);
}
}
int main()
{
ifstream f("cautbin.in");
ofstream g("cautbin.out");
f>>n;
int i;
for(i=0; i<n; i++)
f>>v[i];
int m;
f>>m;
for(i=0; i<m; i++)
{
int x, y;
f>>x>>y;
if(x == 0)
g<<cautbin1(0, n-1, y)<<"\n";
if(x == 1)
g<<cautbin2(0, n-1, y)<<"\n";
if(x == 2)
g<<cautbin3(0, n-1, y)<<"\n";
}
return 0;
}
