Mai intai trebuie sa te autentifici.
Cod sursa(job #2488753)
Utilizator | Data | 7 noiembrie 2019 16:36:03 | |
---|---|---|---|
Problema | Cautare binara | Scor | 0 |
Compilator | cpp-64 | Status | done |
Runda | Arhiva educationala | Marime | 1.51 kb |
#include<fstream>
#include<climits>
using namespace std;
ifstream fin("euclid2.in");
ofstream fout("euclid2.out");
int v[100001],n,m;
void citire()
{
fin>>n;
for(int i=1; i<=n; i++)
{
fin>>v[i];
}
v[n+1]=INT_MAX;
}
int cautb(int t, int x)
{
int s,d,i,ok,m;
if(t==0)
{
s=1;
d=n;
while(s<d)
{
m=(s+d)/2;
if(v[m]>x)
d=m;
else
s=m+1;
}
s--;
if(x==v[s])
return s;
else
return -1;
}
else if(t==1)
{
s=1;
d=n;
while(s<d)
{
m=(s+d)/2;
if(v[m]>x)
d=m;
else
s=m+1;
}
s--;
if(x==v[s])
return s;
else
{
return s;
}
}
else if(t==2)
{
s=1;
d=n;
while(s<d)
{
m=(s+d)/2;
if(v[m]==x)
break;
else
{
if(v[m]>x)
d=m;
else
s=m+1;
}
}
m--;
if(x==v[m])
return m;
else
{
return s;
}
}
}
int main ()
{
citire();
int t,y,z;
fin>>t;
while(t>0)
{
fin>>y>>z;
fout<<cautb(y, z)<<'\n';
t--;
}
}