Pagini recente » Cod sursa (job #1768287) | Cod sursa (job #1202335) | Cod sursa (job #2326628) | Cod sursa (job #2935153) | Cod sursa (job #2830019)
#include <iostream>
#include <fstream>
#define MAX 100002
using namespace std;
int n,m,v[MAX],t,x;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
int cautareb0(int x){
/// cea mai mare pozitie pe care se afla un element cu valoarea x sau -1
/// daca aceasta valoare nu se gaseste in sir
int mid,st = 1, dr = n;
while(st <= dr){
mid = (st+dr)/2;
if(v[mid] <= x){
st = mid+1;
}else{
dr = mid-1;
}
}
mid = (st+dr)/2;
if(v[mid] > x){
mid--;
}
if(v[mid] == x){
return mid;
}
return -1;
}
int cautareb1(int x){
/// cea mai mare pozitie pe care se afla un element cu valoarea mai mica sau
/// egala cu x in sir. Se garanteaza ca cel mai mic numar al sirului este mai
/// mic sau egal decat x
int mid,st = 1, dr = n;
while(st < dr){
mid = (st+dr)/2;
if(v[mid] <= x){
st = mid+1;
}else{
dr = mid;
}
}
mid = (st+dr)/2;
if(v[mid] > x){
mid--;
}
return mid;
}
int cautareb2(int x){
/// cea mai mica pozitie pe care se afla un element cu valoarea mai mare sau
/// egala cu x in sir. Se garanteaza ca cel mai mare numar din sir este mai
/// mare sau egal decat x
int mid,st = 1, dr = n;
while(st < dr){
mid = (st+dr)/2;
if(v[mid] < x){
st = mid+1;
}else{
dr = mid;
}
}
mid = (st+dr)/2;
if(v[mid] < x){
++mid;
}
return mid;
}
int main()
{
fin >> n;
for(int i = 1; i <= n; i++){
fin >> v[i];
}
fin >> m;
for(int i = 1; i <= m; i++){
fin >> t >> x;
if(t == 0){
fout << cautareb0(x) << "\n";
}else if(t == 1){
fout << cautareb1(x) << "\n";
}else if(t == 2){
fout << cautareb2(x) << "\n";
}
}
return 0;
}