Cod sursa(job #1686465)

Utilizator JavaAlexDinu Alexandru JavaAlex Data 12 aprilie 2016 11:41:16
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.19 kb
#include <stdio.h>

using namespace std;
FILE *in , *out;

const long int N = 100000;

unsigned int el[N];

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