Pagini recente » Cod sursa (job #1348893) | Cod sursa (job #1202712) | Cod sursa (job #827392) | Cod sursa (job #2362817) | Cod sursa (job #1728835)
#include <cstdio>
#define nmax 100005
using namespace std;
int v[nmax];
void fct1(int v[], int n, int x)
{
int stg=1;
int dr=n;
int last=0;
while(stg<=dr)
{
int mijl=stg+(dr-stg)/2;
if(v[mijl]==x)
{
last=mijl;
stg=mijl+1;
}
if(v[mijl]!=x)
{
if(v[mijl]<x)
stg=mijl+1;
else
dr=mijl-1;
}
}
if(last==0)
printf("-1\n");
else
printf("%d\n", last);
}
void fct2(int v[], int n, int x)
{
int stg=1;
int dr=n;
int last=0;
while(stg<=dr)
{
int mijl=stg+(dr-stg)/2;
if(v[mijl]<=x)
{
last=mijl;
stg=mijl+1;
}
else
dr=mijl-1;
}
printf("%d\n", last);
}
void fct3(int v[], int n, int x)
{
int stg=1;
int dr=n;
int last=0;
while(stg<=dr)
{
int mijl=stg+(dr-stg)/2;
if(v[mijl]>=x)
{
last=mijl;
dr=mijl-1;
}
else
stg=mijl+1;
}
printf("%d\n", last);
}
int main()
{
freopen("cautbin.in", "r", stdin);
freopen("cautbin.out", "w", stdout);
int n, m, nr;
short q;
scanf("%d", &n);
for(register int i=1;i<=n;i++)
scanf("%d", &v[i]);
scanf("%d", &m);
while(m)
{
scanf("%hd%d", &q, &nr);
switch(q)
{
case 0:fct1(v, n, nr);break;
case 1:fct2(v, n, nr);break;
case 2:fct3(v, n, nr);break;
}
m--;
}
return 0;
}