Cod sursa(job #1089630)

Utilizator kiralalaChitoraga Dumitru kiralala Data 21 ianuarie 2014 20:15:16
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.98 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 mij,st,dr;
    st=0,dr=n-1;
    while(st<=dr)
    {
        mij=st+(dr-st)/2;
        if(v[mij]<=val)
            st=mij+1;
        else
            dr=mij-1;
    }
    return st-1;
}

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;
}