Pagini recente » Cod sursa (job #497556) | Cod sursa (job #2904223) | Cod sursa (job #2185843) | Cod sursa (job #1187990) | Cod sursa (job #502415)
Cod sursa(job #502415)
#include <algorithm>
#define DIM 100003
using namespace std ;
int n , m ;
int v[DIM] ;
int a , b ;
int st , dr ,mij ;
int key ;
int binary_search1(int x) {
st=1 ;
dr=n ;
key=-1 ;
while (st<=dr) {
mij=st+(dr-st)/2 ;
if (v[mij]>x) {
dr=mij-1;
}
if (v[mij]<x) {
st=mij+1;
}
if (v[mij]==x) {
st=mij+1 ;
if (mij>key) {
key=mij ;
}
}
}
return key ;
}
int binary_search2(int x) {
dr=n ;
key=-1 ;
st=1 ;
while (st<=dr) {
mij=st+(dr-st)/2 ;
if (v[mij]<=x) {
key=mij;
st=mij+1;
}
if (v[mij]>x)
dr=mij-1;
}
return key ;
}
int binary_search3(int x) {
dr=x ;
key=n+1 ;
st=1 ;
while (st<=dr) {
mij=st+(dr-st)/2 ;
if (v[mij]>=x) {
key=mij;
dr=mij-1;
}
if(v[mij]<x) {
st=mij+1;
}
}
return key;
}
int main() {
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" , &a , &b) ;
if (a==0) {
printf ("%d\n",binary_search1(b));
}
if (a==1) {
printf ("%d\n",binary_search2(b));
}
if (a==2) {
printf ("%d\n",binary_search3(b));
}
}
return 0;
}