Cod sursa(job #2427846)
| Utilizator | Data | 2 iunie 2019 14:19:47 | |
|---|---|---|---|
| Problema | Cautare binara | Scor | 40 |
| Compilator | cpp-64 | Status | done |
| Runda | Arhiva educationala | Marime | 1.28 kb |
#include<fstream>
using namespace std;
ifstream in("cautbin.in");
ofstream out("cautbin.out");
int v[100000];
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;
}
while(v[pos]<=x)
pos++;
pos--;
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;
}
while(v[pos]>=x)
pos--;
pos++;
out<<pos<<'\n';
}
m--;
}
return 0;
}
