Cod sursa(job #2015384)

Utilizator workwork work work Data 25 august 2017 23:41:12
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.12 kb
#include <bits/stdc++.h>

using namespace std;

FILE *F=fopen("cautbin.in", "r"), *G=fopen("cautbin.out", "w");

int n, v[100005], x, q, m;

int bs1(int x)
{
    int st = 1, dr = n, mij, ok = 0;
    while(st <= dr)
    {
        mij = (st+dr)>>1;
        if(v[mij] <= x) st = mij+1, ok = 1;
        else dr = mij - 1;
    }
    if(!ok) return -1;
    return st-1;
}

int bs2(int x)
{
    int st = 1, dr = n, mij;
    while(st <= dr)
    {
        mij = (st+dr)>>1;
        if(v[mij] <= x) st = mij+1;
        else dr = mij - 1;
    }
    return st-1;
}

int bs3(int x)
{
    int st = 1, dr = n, mij;
    while(st <= dr)
    {
        mij = (st+dr)>>1;
        if(v[mij] < x) st = mij+1;
        else dr = mij - 1;
    }
    return dr+1;
}

int main()
{
    fscanf(F, "%d ", &n);
    for(int i = 1; i <= n; ++ i) fscanf(F, "%d ", &v[i]);
    fscanf(F, "%d ", &m);
    while(m--)
    {
        fscanf(F, "%d %d ", &q, &x);
        if(!q) fprintf(G, "%d\n", bs1(x));
        else if(q == 1) fprintf(G, "%d\n", bs2(x));
        else if(q == 2) fprintf(G, "%d\n", bs3(x));
    }
    return 0;
}