Pagini recente » Cod sursa (job #2523609) | Cod sursa (job #1113453) | Cod sursa (job #1733180) | Cod sursa (job #3276152) | Cod sursa (job #2478009)
#include <iostream>
#include <fstream>
using namespace std;
int a[100010],n;
long task_0 (long x)
{
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 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 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 M,i,q,x,task;
ifstream in ("cautbin.in");
ofstream out ("cautbin.out");
in >> n ;
for (i = 0 ; i < n; i++) in >> a[i];
in >> M ;
for (q = 0 ; q < M ; q ++)
{
in >> task >> x;
if (task == 0) out << task_0(x) << endl;
else if (task == 1) out << task_1(x) << endl;
else out << task_2(x) << endl;
}
return 0;
}