Pagini recente » Cod sursa (job #551910) | Cod sursa (job #2285119) | Cod sursa (job #300173) | Cod sursa (job #1965361) | Cod sursa (job #209556)
Cod sursa(job #209556)
#include <iostream>
#include <fstream>
using namespace std;
int binary_search(int a[],int x,int n)
{
int l=0;
int h=n;
int middle;
while(l<h) {
middle = (l+h)/2;
if(a[middle] < x)
l = middle + 1;
else
h = middle;
}
if(l < n && a[l] == x)
return l;
else
return -1;
}
int find_max(int a[],int x,int n)
{
int pos=binary_search(a,x,n);
while(1){
if(pos == n-1) return pos;
pos++;
if(a[pos] !=x) return pos-1;
}
}
int find_min_eq(int a[],int x,int n)
{
int pos = binary_search(a,x,n);
if(pos == -1)
while(1){
x--;
pos = binary_search(a,x,n);
if(pos != -1) return pos;
}
else return pos;
}
int find_max_eq(int a[],int x, int n)
{
int pos = binary_search(a,x,n);
if(pos == -1)
while(1){
x++;
pos = binary_search(a,x,n);
if(pos != -1) return pos;
}
else return pos;
}
int main()
{
ifstream file("cautbin.in");
int n;
file >> n;
int *el = new int[100000];
int i;
for(i=0;i<n;i++)
file >> el[i];
int m;
int id, x;
file >> m;
ofstream out("cautbin.out");
for(i = 0 ;i < m;i++){
file >> id;
file >> x;
switch(id){
case 0: out << find_max(el,x,n) << "\n"; break;
case 1: out << find_min_eq(el,x,n) << "\n"; break;
case 2: out << find_max_eq(el,x,n) << "\n"; break;
}
}
out.close();
delete [] el;
return 0;
}