Cod sursa(job #2080460)

Utilizator onoflorinFlorin Onofrei onoflorin Data 2 decembrie 2017 23:27:09
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.25 kb
#include <iostream>
#include <cstdio>

using namespace std;

const int L = 17;
int v[100001];
int main()
{
    FILE *fin, *fout;
    int n, r, pas, i, m, tip, val, cr, cv;
    fin=fopen("cautbin.in", "r");
    fout=fopen("cautbin.out", "w");
    fscanf(fin, "%d\n", &n);
    for(i=0; i<n; i++)
        fscanf(fin, "%d ", &v[i]);
    fscanf(fin, "\n%d\n", &m);
    while(m>0)
    {
        fscanf(fin, "%d %d\n", &tip, &val);
        r=0;
        pas=1<<L;
        while(pas!=0)
        {
            if(r+pas<n && v[r+pas]<=val)
                r+=pas;
            pas/=2;
        }
        if(tip==0)
        {
            if(v[r]==val)
                fprintf(fout, "%d\n", r+1);
            else
                fprintf(fout, "-1\n");
        }
        if(tip==1)
        {
            pas=1<<L;
            r++;
            fprintf(fout, "%d\n", r);
        }
        if(tip==2)
        {
            if(v[r]==val)
            {
                while(v[r]==val)
                    r--;
                r=r+1;
            }
            else
                while(v[r]<val)
                    r++;
            fprintf(fout, "%d\n", r+1);
        }
        m--;
    }
    fclose(fin);
    fclose(fout);
    return 0;
}