Nu aveti permisiuni pentru a descarca fisierul grader_test8.ok
Cod sursa(job #1287466)
Utilizator | Data | 7 decembrie 2014 16:47:29 | |
---|---|---|---|
Problema | Cautare binara | Scor | 100 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 0.88 kb |
#include <cstdio>
using namespace std;
const int NMax = 1e5 + 2;
int n;
int A[NMax];
int Binary(int val)
{
int poz=0, pas=(1<<17); // log2 of NMax
while(pas>>=1)
{
if( (pas+poz<=n) && A[pas+poz]<=val)
poz+=pas;
}
return poz;
}
int main()
{
freopen("cautbin.in","r",stdin);
freopen("cautbin.out","w",stdout);
int i,op,x,m,poz;
scanf("%d",&n);
for(i=1;i<=n;i++)
scanf("%d",&A[i]);
scanf("%d",&m);
for(i=1;i<=m;i++)
{
scanf("%d %d",&op,&x);
if(op == 0)
{
poz=Binary(x);
if(A[poz] == x ) printf("%d\n",poz);
else
printf("-1\n");
}
else if(op == 1)
{
poz=Binary(x);
printf("%d\n",poz);
}
else
{
poz=Binary(x-1);
printf("%d\n",poz+1);
}
}
}