Cod sursa(job #873587)

Utilizator andi12Draghici Andrei andi12 Data 7 februarie 2013 13:55:57
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.95 kb
#include <iostream>
#include<cstdio>
using namespace std;
int a[100005];
int n;
int bs(int v[],int x)
{
    long long pas,i=0;
    for(pas=1<<18;pas>=1;pas>>=1)
        if(i+pas<=n && v[i+pas]<=x)
            i=i+pas;
    return i;
}
int main()
{
    FILE *in,*out;
    in=fopen("cautbin.in","r");
    out=fopen("cautbin.out","w");
    int m,j,y,z,r;
    fscanf(in,"%d",&n);
    for(j=1;j<=n;j++)
        fscanf(in,"%d",&a[j]);
    fscanf(in,"%d",&m);
    for(j=1;j<=m;j++)
    {
        fscanf(in,"%d",&y);
        fscanf(in,"%d",&z);
        if(y==0)
        {
            r=bs(a,z);
            if(a[r]==z)
                fprintf(out,"%d\n",r);
            else
                fprintf(out,"-1\n");
        }
        if(y==1)
        {
            r=bs(a,z);
            fprintf(out,"%d\n",r);
        }
        if(y==2)
        {
            r=bs(a,z-1);
            fprintf(out,"%d",r+1);
        }
    }
    return 0;
}