Pagini recente » Cod sursa (job #1458902) | Cod sursa (job #666646) | Cod sursa (job #927303) | Cod sursa (job #1137000) | Cod sursa (job #2478008)
#include <iostream>
#include <fstream>
using namespace std;
long task_0 (long x, long a[], long n)
{
long l = 0, r = n;
// a[0..l) <= x < a[r..n) && l < r
while (l < r)
{
long m = (l+r)/2;
if (x >= a[m]) l = m+1;
else r = m;
}
// l == r => a[0..l) <= x < a[l..n), so we return (l-1)+1 if a[l-1] = x and (-1) otherwise
if (a[l-1] == x) return l;
else return (-1);
}
long task_1(long x, long a[], long n)
{
long l = 0, r = n;
// a[0..l) <= x < a[r..n) && l < r
while (l < r)
{
long m = (l+r)/2;
if (x >= a[m]) l = m+1;
else r = m;
}
// l == r => a[0..l) <= x < a[l..n), so we return (l-1)+1 if a[l-1] = x and (-1) otherwise
return l;
}
long task_2(long x, long a[], long n)
{
long l = 0, r = n;
// a[0..l) < x <= a[r..n) && l < r
while (l < r)
{
long m = (l+r)/2;
if (x > a[m]) l = m+1;
else r = m;
}
// l == r => a[0..l) < x <= a[l..n), so we return (l-1)+1 if a[l-1] = x and (-1) otherwise
return (l+1);
}
int main()
{
long N,M,i,q,elems[100010],x,task;
ifstream in ("cautbin.in");
ofstream out ("cautbin.out");
in >> N ;
for (i = 0 ; i < N; i++) in >> elems[i];
in >> M ;
for (q = 0 ; q < M ; q ++)
{
in >> task >> x;
if (task == 0) out << task_0(x,elems,N) << endl;
else if (task == 1) out << task_1(x,elems,N) << endl;
else out << task_2(x,elems,N) << endl;
}
return 0;
}