Cod sursa(job #2427848)
| Utilizator | Data | 2 iunie 2019 14:23:25 | |
|---|---|---|---|
| Problema | Cautare binara | Scor | 100 |
| Compilator | cpp-64 | Status | done |
| Runda | Arhiva educationala | Marime | 1.15 kb |
#include<fstream>
using namespace std;
ifstream in("cautbin.in");
ofstream out("cautbin.out");
int v[1000000];
int main ()
{
int n,m,i,x,y,msk,pos=0;
in>>n;
for(i=1; i<=n; i++)
in>>v[i];
in>>m;
while(m!=0)
{
in>>y;
if(y==0)
{
in>>x;
pos=0;
for(msk=1<<20; msk>0; msk/=2)
{
if(pos+msk<=n && v[pos+msk]<=x)
pos+=msk;
}
if(v[pos]==x)
out<<pos<<'\n';
else
out<<-1<<'\n';
}
if(y==1)
{
in>>x;
pos=0;
for(int msk=1<<20; msk>0; msk/=2)
{
if(pos+msk<=n && v[pos+msk]<=x)
pos+=msk;
}
out<<pos<<'\n';
}
if(y==2)
{
in>>x;
pos=0;
for(msk=1<<20; msk>0; msk/=2)
{
if(pos+msk<=n && v[pos+msk]<x)
pos+=msk;
}
out<<pos+1<<'\n';
}
m--;
}
return 0;
}
