Cod sursa(job #1703969)

Utilizator pringonGoje Samuel Andrei Daniel pringon Data 17 mai 2016 20:47:40
Problema Cautare binara Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.16 kb
#include <fstream>

using namespace std;

ifstream in("cautbin.in");
ofstream out("cautbin.out");

int n;
int v[100001];

void read() {
    for(int i=1;i<=n;i++)
        in>>v[i];
}

int response0(int x) {
    int pas = 1<<16;
    int i=0;

    while(pas != 0) {
        if(i+pas <= n and v[i+pas] == x)
            i += pas;
        pas /= 2;
    }

    if(i == 0)
        return -1;
    return i;
}

int response1(int x) {
    int pas = 1<<16;
    int i=0;

    while(pas != 0) {
        if(i+pas <= n and v[i+pas] <= x)
            i += pas;
        pas /= 2;
    }

    return i;
}

int response2(int x) {
    int pas = 1<<16;
    int i=0;

    while(pas != 0) {
        if(i+pas <= n and v[i+pas] < x)
            i += pas;
        pas /= 2;
    }

    return i+1;
}

int main() {
    int m;
    int request;
    int criterion;

    in>>n;
    read();
    in>>m;

    for(int t=1;t<=m;t++) {
        in>>request>>criterion;

        if(request == 0)
            out<<response0(criterion)<<"\n";
        else if(request == 1)
            out<<response1(criterion)<<"\n";
        else
            out<<response2(criterion)<<"\n";

    }

    in.close();
    out.close();
    return 0;
}