Mai intai trebuie sa te autentifici.
Cod sursa(job #1697599)
Utilizator | Data | 2 mai 2016 15:13:40 | |
---|---|---|---|
Problema | Cautare binara | Scor | 60 |
Compilator | c | Status | done |
Runda | Arhiva educationala | Marime | 0.86 kb |
#include <stdio.h>
#include <stdlib.h>
int v[100000];
int main(){
int n, m, c, i, x;
int log=1, lg;
FILE *fin, *fout;
fin=fopen("cautbin.in", "r");
fout=fopen("cautbin.out", "w");
fscanf(fin, "%d", &n);
for(i=0; i<n; i++)
fscanf(fin, "%d", &v[i]);
fscanf(fin, "%d", &m);
while(log<n) log<<=1; ///construim cea mai mare putere mai mare sau egala decat n a lui 2
while(m--){
fscanf(fin, "%d%d", &c, &x);
if(c==2) x--;
lg=log;
for(i=0; lg; lg>>=1)
if(i+lg<n && v[i+lg]<=x)///daca mai adaugam bitul la care ne aflam nu iesim din vector( < n )
i+=lg; ///si daca il adaugam numarul care se afla pe e mai mic sau egal decat valoarea cautata
if(c==0){
if(v[i]!=x) i=-2;
}
else if(c==2)
i++;
fprintf(fout, "%d\n", i+1);
}
fclose(fin);
fclose(fout);
return 0;
}