Mai intai trebuie sa te autentifici.
Cod sursa(job #1816302)
Utilizator | Data | 26 noiembrie 2016 12:43:28 | |
---|---|---|---|
Problema | Cautare binara | Scor | 60 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 1.02 kb |
#include <cstdio>
using namespace std;
FILE *f=fopen("cautbin.in","r");
FILE *g=fopen("cautbin.out","w");
int v[100000],n;
int rez1(int x)
{
int pas=1<<16,r=0;
while(pas!=0)
{
if(r+pas<=n)
if(v[r+pas]<=x)
r+=pas;
pas/=2;
}
if(v[r]==x)
return r;
else return -1;
}
int rez2(int x)
{
int pas=1<<16,r=0;
while(pas!=0)
{
if(r+pas<=n)
if(v[r+pas]<=x)
r+=pas;
pas/=2;
}
return r;
}
int rez3(int x)
{
int pas=1<<16,r=0;
while(pas!=0)
{
if(r+pas<=n)
if(v[r+pas]<x)
r+=pas;
pas/=2;
}
return r+1;
}
int main()
{
int p,x,m,i;
fscanf(f,"%d",&n);
for(i=1; i<=n; i++)
fscanf(f,"%d",&v[i]);
fscanf(f,"%d",&m);
for(i=1; i<=m; i++)
{
fscanf(f,"%d%d",&p,&x);
if(p==0)
fprintf(g,"%d\n",rez1(x));
else if(p==1)
fprintf(g,"%d\n",rez2(x));
else fprintf(g,"%d\n",rez3(x));
}
return 0;
}