Pagini recente » Cod sursa (job #1843012) | Cod sursa (job #2584653) | Cod sursa (job #2734338) | Cod sursa (job #559284) | Cod sursa (job #617576)
Cod sursa(job #617576)
#include <iostream>
#include <iomanip>
#include <fstream>
#include <cstring>
#include <cstdlib>
#include <string>
using namespace std;
#define LL long long
#define INFILE "cautbin.in"
#define OUTFILE "cautbin.out"
#define NMAX 100000
int n, m, v[NMAX];
int binary_search(int val)
{
int i, step;
for(step=1; step<n; step<<=1);
for(i=0; step; step>>=1)
if( i+step<n && v[i+step]<=val )
i += step;
return i;
}
int main()
{
freopen(INFILE, "r", stdin);
freopen(OUTFILE, "w", stdout);
scanf("%d", &n);
for(int i=0; i<n; i++)
scanf("%d", &v[i]);
int t, x, bs;
scanf("%d", &m);
for(int i=0; i<m; i++)
{
scanf("%d %d", &t, &x);
switch(t) {
case 0:
bs = binary_search(x);
printf("%d\n", (v[bs] == x ? 1+bs : -1 ));
break;
case 1:
printf("%d\n", 1+binary_search(x));
break;
default:
printf("%d\n", binary_search(x-1)+2);
}
}
return 0;
}