Pagini recente » Cod sursa (job #1988646) | Clasamentul arhivei de probleme | Cod sursa (job #928539) | Clasamentul arhivei de probleme | Cod sursa (job #2205316)
#include <stdio.h>
#include <stdlib.h>
#define N 100001
#define L 16
int v[N], n;
int test0(int x)
{
int r = 0, pas = 1 << L;
while(pas!= 0)
{
if(r + pas <= n && v[r + pas] <= x)
{
r += pas;
}
pas /= 2;
}
if(v[r] < x)
{
r = -1;
}
return r;
}
int test1(int x)
{
int r = 0, pas = 1<<L;
while(pas!= 0)
{
if(r + pas <= n && v[r + pas] <= x)
{
r += pas;
}
pas /= 2;
}
return r;
}
int test2(int x)
{
int r = 0, pas = 1 << L;
while(pas!= 0)
{
if(r + pas <= n && v[r+pas] < x)
{
r += pas;
}
pas /= 2;
}
r++;
return r;
}
int main()
{
freopen("cautbin.in", "r", stdin);
freopen("cautbin.out", "w", stdout);
scanf("%d", &n);
int i;
for(i = 1; i <= n; i++)
{
scanf("%d", &v[i]);
}
int q, tip, x;
scanf("%d", &q);
for (i = 1; i <= q; i++)
{
scanf("%d%d", &tip, &x);
if (tip == 0)
{
printf("%d\n", test0(x));
}
if (tip == 1)
{
printf("%d\n", test1(x));
}
if (tip == 2)
{
printf("%d\n", test2(x));
}
}
fclose(stdin);
fclose(stdout);
return 0;
}