Cod sursa(job #1503070)

Utilizator OlivianOlivian Dan Cretu Olivian Data 15 octombrie 2015 15:33:11
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.77 kb
#include<cstdio>
#define NMAX 1000007
using namespace std;
int n,m,a,b,x,p,v[NMAX];
int cautbin(int val)
{
    int start=0;int step=(1<<20);
    for(;step;step>>=1)
    {
        int index=start+step;
        if(index>n)continue;
        if(v[index]<=val) start=index;
    }return start;
}
int main()
{
    freopen("cautbin.in","r",stdin);
    freopen("cautbin.out","w",stdout);
    scanf("%d",&n);
    for(int i=1;i<=n;i++) scanf("%d",&v[i]);
    scanf("%d",&m);
    for(;m;m--)
    {
        scanf("%d %d",&a,&b);
        if(a==0)
        {
            p=cautbin(b);
            if (v[p]==b) printf("%d\n",p);
            else printf("-1\n");
        }
        if(a==1) printf("%d\n",cautbin(b));
        if(a==2) printf("%d\n",cautbin(b-1)+1);
    }
}