Pagini recente » Cod sursa (job #1997125) | Cod sursa (job #141817) | Cod sursa (job #1008283)
#include <iostream>
#include <fstream>
#define L_MAX 100010
using namespace std;
ifstream in("cautbin.in");
ofstream out("cautbin.out");
int v[L_MAX], N, M, x;
int bsearch(int lo, int hi)
{
int mid;
hi = N;
lo = 1;
while (hi - lo >= 0)
{
mid = (lo + hi) / 2;
if (v[mid] <= x)
lo = mid+1;
else
hi = mid-1;
}
if (hi ==N || v[hi] != x)
return -1;
else
return hi;
}
int b1search(int lo, int hi)
{
int mid;
hi = N;
lo = 1;
while (hi - lo >= 0)
{
mid = (lo + hi) / 2;
if (v[mid] <= x)
lo = mid+1;
else
hi = mid-1;
}
if(v[hi] <= x)
return hi;
else return -1;
}
int b2search(int lo, int hi)
{
int mid;
hi = N;
lo = 1;
while (hi - lo >= 0)
{
mid = (lo + hi) / 2;
if (v[mid] >= x)
hi = mid-1;
else
lo = mid+1;
}
if(v[lo] >= x)
return lo;
else return -1;
}
int main()
{
in >> N;
for(int i = 1; i <= N; i++)
in >> v[i];
in >> M;
for(int i = 0; i < M; i++)
{
int t;
in >> t;
if(t == 0)
{
in >> x;
out << bsearch(1, N) << "\n";
}
if(t == 1)
{
in >> x;
out << b1search(1, N) << "\n";
}
if(t == 2)
{
in >> x;
out << b2search(1, N) << "\n";
}
}
in.close();
out.close();
return 0;
}