Pagini recente » Introducere in asamblare | Istoria paginii monthly-2012/runda-9/solutii | Diferente pentru monthly-2012/runda-9/solutii intre reviziile 21 si 22 | Introducere in asamblare | Cod sursa (job #2779244)
#include <fstream>
using namespace std;
ifstream f ("cautbin.in");
ofstream g ("cautbin.out");
int v [100001];
int cautbin (int x , int n){
///cerinta 0 si 1
///ultimul din zona verde
int pas = (1 << 16) , r = 0;
while (pas != 0){
if (pas + r <= n && v [pas + r] <= x)
r = r + pas;
pas = pas / 2;
}
return r;
}
int cautbin2 (int x , int n){
///cerinta 2
///primul din zona rosie
int pas = (1 << 16) , r = 0;
while (pas != 0){
if (pas + r <= n && v [pas + r] < x)
r = r + pas;
pas = pas / 2;
}
return r + 1;
}
int main()
{
int n , m;
f >> n;
for(int i = 1 ; i <= n ; ++ i)
f >> v [i];
f >> m;
for(int i = 1 ; i <= m ; ++ i){
int tip , x;
f >> tip >> x;
if (tip == 0 || tip == 1){
int poz = cautbin (x , n);
if (tip == 0){
if (v [poz] == x)
g << poz << '\n';
else
g << -1 << '\n';
}
else
g << poz << '\n';
}
else
g << cautbin2 (x , n) << '\n';
}
return 0;
}