Pagini recente » Cod sursa (job #1817496) | Cod sursa (job #507200) | Cod sursa (job #3135263) | Cod sursa (job #2800861) | Cod sursa (job #1697616)
#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
i=(v[i]!=x && c==0) ? -1 : i;
i= (c==2 && v[i]<x+1) ? i++ : i;
fprintf(fout, "%d\n", i+1);
}
fclose(fin);
fclose(fout);
return 0;
}