Cod sursa(job #1686473)

Utilizator JavaAlexDinu Alexandru JavaAlex Data 12 aprilie 2016 11:46:44
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.16 kb
#include <stdio.h>

using namespace std;
FILE *in , *out;

const int N = 100001;
const int L = 16;

unsigned int el[N];

int allInOne(int n, int x, int c, unsigned int vec[]){
      int j,pas;
      if(x == 0){
          pas = 1<<L;
          j=0;
          while(pas != 0){
              if(j+pas <= n && vec[j+pas] <= c) j+= pas;
              pas /= 2;
          }
          if(vec[j] == c) return j;
          else return -1;
      }else if(x == 1){
          pas = 1<<L;
          j=0;
          while(pas != 0){
              if(j+pas <= n && vec[j+pas] <= c) j+= pas;
              pas /= 2;
          }
          return j;
      }else if(x == 2){
          pas = 1<<L;
          j=0;
          while(pas != 0){
              if(j+pas <= n && vec[j+pas] < c) j+= pas;
              pas /= 2;
          }
          return 1+j;
      }
}
int main()
{
    int n, m ,i, x, c;
    in = fopen("cautbin.in" , "r");
    fscanf(in, "%d" , &n);
    for(i=1;i<=n;i++) fscanf(in, "%u" , &el[i]);
    fscanf(in, "%d" , &m);
    out = fopen("cautbin.out" , "w");
    for(i=0;i<m;i++){
        fscanf(in , "%d %d" , &x, &c);
        fprintf(out , "%d\n" , allInOne(n,x,c,el));
    }
    return 0;
}