Cod sursa(job #472643)
Utilizator | Data | 25 iulie 2010 22:40:51 | |
---|---|---|---|
Problema | Cautare binara | Scor | 40 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 1.71 kb |
#include<iostream.h>
#include<fstream.h>
int main(){
ifstream f("cautbin.in");
ofstream g("cautbin.out");
int n, x;
f>>n;
int a[100010], i, j, st, dr, m, t, p;
for (i = 1; i <= n; i++)
f>>a[i];
f>>p;
for (i = 1; i <= p; i++){
f>>t>>x;
st = 1;
dr = n;
m = (st+dr)/2;
while (st <= dr && a[m] != x){
if (x < a[m])
dr = m-1;
else
st = m+1;
m = (st+dr)/2;
}
if (t == 0)
if (a[m] != x)
g<<-1<<'\n';
else {
while (a[m] == x)
m++;
g<<m-1<<'\n';
}
else
if (t == 1){
if (a[m] <= x){
while ( m < n && a[m] <= x)
m++;
if (m == n)
g<<m<<'\n';
else
g<<m-1<<'\n';
}
else {
while (a[m] > x && m > 1)
m--;
g<<m<<'\n';
}
}
else {
if (a[m] >= x){
while (a[m] >= x && m > 1)
m--;
if (m == 1)
g<<m<<'\n';
else
g<<m+1<<'\n';
}
else {
while (m < n && a[m] < x)
m++;
g<<m<<'\n';
}
}
}
return 0;
}