Pagini recente » Cod sursa (job #2554434) | Cod sursa (job #2204523) | Cod sursa (job #2939343) | infoarena - comunitate informatica, concursuri de programare | Cod sursa (job #1074315)
//
// main.c
// cautbin
//
// Created by Alexandru Bâgu on 1/7/14.
// Copyright (c) 2014 Alexandru Bâgu. All rights reserved.
//
#include <stdio.h>
int binsea2(int *v, int n, int x)
{
int i, k = 1 << 30;
for(i = 0; i < n && k > 0; k >>= 1)
if(i + k < n)
if(v[i + k] <= x)
i += k;
return i + 1;
}
int binsea1(int *v, int n, int x)
{
int i = binsea2(v, n, x) - 1;
if(v[i] != x) return -1;
return i + 1;
}
int binsea3(int *v, int n, int x)
{
int i, k = 1 << 30;
for(i = 0; i < n && k >= 0; k >>= 1)
if(i + k < n)
if(v[i + k] < x)
return i + 2;
return 0;
}
int validate1(int *v, int i, int x)
{
if(v[i] == x) return i + 1;
else return -1;
}
int main(int argc, const char * argv[])
{
freopen("cautbin.in", "r", stdin);
freopen("cautbin.out", "w", stdout);
int n, i, q;
scanf("%d", &n);
int *v = (int*)malloc(n * sizeof(int));
for(i = 0; i < n; i++)
scanf("%d", v + i);
scanf("%d", &q);
int a, x;
for(i = 0; i < q; i++)
{
scanf("%d %d", &a, &x);
if(a == 0) printf("%d\n", binsea1(v, n, x));
else if(a == 1) printf("%d\n", binsea2(v, n, x));
else printf("%d\n", binsea3(v, n, x));
}
return 0;
}