Cod sursa(job #1142711)
Utilizator | Data | 14 martie 2014 08:51:36 | |
---|---|---|---|
Problema | Cautare binara | Scor | 0 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 1.79 kb |
#include <fstream>
using namespace std;
ifstream f("cautbin.in");ofstream g("cautbin.out");
int a[100001];
int main()
{
int n,m,c,r;
f>>n;
for(int i=1;i<=n;i++)
{
f>>a[i];
}
f>>m;
for(int i=1;i<=m;i++)
{
f>>c>>r;
switch(c)
{
case 0:
{
int p=1,u=n,ok=0,m,poz;
while(p<=u && ok==0)
{
m=(p+u)/2;
if(r==a[m])
ok=1,poz=m;
else
{
if(r<a[m])
u=m-1;
else p=m+1;
}
}
if(ok)
{
while(a[poz]==a[poz+1]) poz++;
g<<poz<<'\n';
}
else g<<"-1"<<'\n';
break;
}
case 1:
{
int p=1,u=n,ok=0,m,poz;
while(p<=u && ok==0)
{
m=(p+u)/2;
if(r==a[m])
ok=1,poz=m;
else
{
if(r<a[m])
u=m-1;
else p=m+1;
}
}
if(ok)
{
while(a[poz]==a[poz+1]) poz++;
g<<poz<<'\n';
}
else
{
g<<'\n'<<a[poz];
}
break;
}
case 2:
{
break;
}
}
}
f.close();g.close();
return 0;
}