Cod sursa(job #1089666)

Utilizator kiralalaChitoraga Dumitru kiralala Data 21 ianuarie 2014 20:52:08
Problema Cautare binara Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 0.97 kb
#include <fstream>
#define NMAX 100005

using namespace std;

FILE* f=freopen("cautbin.in","r",stdin);
FILE* o=freopen("cautbin.out","w",stdout);

int n,m;
int v[NMAX];

int binsearch(int val)
{
    int i, step;
    for (step = 1; step < n; step <<= 1);
    for (i = 0; step; step >>= 1)
        if (i + step < n && v[i + step] <= val)
           i += step;
    return i;
}

int main()
{
    scanf("%d",&n);

    for(int i=0;i<n;++i)
        scanf("%d",&v[i]);

    scanf("%d",&m);

    for(int i=0;i<m;++i)
    {
        int t,x;
        scanf("%d%d",&t,&x);
        int p=binsearch(x);
        switch(t)
        {
            case 0:
                printf("%d\n",((v[p]==x)?p+1:-1));
                break;
            case 1:
                printf("%d\n",p+1);
                break;
            case 2:
                while(v[p]==x) p-=1;
                printf("%d\n",p+2);
                break;
        }
    }

    return 0;
}