Pagini recente » Cod sursa (job #866819) | Cod sursa (job #2179545) | Cod sursa (job #735050) | Cod sursa (job #1239636) | Cod sursa (job #2074527)
#include <stdio.h>
#include <stdlib.h>
#define N 100001
#define L 16;
int n, v[N];
int count0(int x)
{
int r = 0, pass = 1 << L;
while(pass != 0)
{
if(r + pass <= n && v[r + pass] <= x)
{
r += pass;
}
pass /= 2;
}
if(v[r] != x)
{
r = -1;
}
return r;
}
int count1(int x)
{
int r = 0, pass = 1 << L;
while(pass != 0)
{
if(r + pass <= n && v[r + pass] <= x)
{
r += pass;
}
pass /= 2;
}
return r;
}
int count2(int x)
{
int r = 0, pass = 1 << L;
while(pass != 0)
{
if(r + pass <= n && !(v[r + pass] >= x))
{
r += pass;
}
pass /= 2;
}
r++;
return r;
}
int main()
{
int m, tip, x;
//ifstream in("coutbin.in");
//ofstream out("coutbin.out");
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(int i = 1; i <= m; ++i)
{
scanf("%d %d", &tip, &x);
if(tip == 0)
{
printf("%d\n", count0(x));
}
else if(tip == 1)
{
printf("%d\n", count1(x));
}
else
{
printf("%d", count2(x));
}
}
return 0;
}