Pagini recente » Cod sursa (job #2613239) | Istoria paginii registru-diplome | Monitorul de evaluare | Rezultatele filtrării | Cod sursa (job #2665192)
#include <bits/stdc++.h>
#define Nmax 100005
using namespace std;
int a[Nmax], N, M, x, c;
ifstream f("cautbin.in");
ofstream g("cautbin.out");
int cb(int x){
int st=1, dr=N, poz = -1;
while(st<=dr){
int m = (st + dr)/2;
if (a[m]<=x)
{poz = m; st = m + 1;}
else dr = m - 1;
}
poz=(a[poz]==x? poz: -1);
return poz;
}
int primul_mai_mare_egal(int x){
int st=1, dr=N, poz = 0;
while(st<=dr){
int m = (st + dr)/2;
if (a[m]>=x){
poz = m;
dr = m - 1;
}
else st= m + 1;
}
return poz;
}
int utimul_mai_mic_egal(int x){
int st=1, dr=N, poz = 0;
while(st<=dr){
int m = (st + dr)/2;
if (a[m]<=x){
poz = m;
st = m + 1;
}
else dr= m - 1;
}
return poz;
}
int main()
{
f>>N;
for(int i= 1; i<=N; i++) f>>a[i];
f>>M;
for(int i = 1; i<=M; i++){
f>>c>>x;
if(c==0) g<<cb(x)<<'\n';
else if(c==2) g<<primul_mai_mare_egal(x)<<'\n';
else g<<utimul_mai_mic_egal(x)<<'\n';
}
return 0;
}