Pagini recente » Monitorul de evaluare | Cod sursa (job #153595) | Cod sursa (job #1000566) | Cod sursa (job #2182114) | Cod sursa (job #2165092)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
int v[100010], n ,m, op, x;
int operation0()
{
int l=1, r=n, mi;
while(l<=r)
{
mi=(l+r)/2;
if(v[mi]<=x)
l=mi+1;
else
r=mi-1;
}
mi=(l+r)/2;
if(v[mi] > x)mi--;
if(v[mi] == x) return mi;
return -1;
}
int operation1()
{
int l=1, r=n, mi=(l+r)/2;
while(l<r)
{
if(v[mi] <= x)
l=mi+1;
else
r=mi-1;
mi=(l+r)/2;
}
if(v[mi] > x) mi--;
return mi;
}
int operation2()
{
int l=1, r=n, mi=(l+r)/2;
while(l<r)
{
if(v[mi] >= x)
r=mi-1;
else
l=mi+1;
mi=(l+r)/2;
}
if(v[mi] < x) mi++;
return mi;
}
int main()
{
fin >> n;
for(int i=1; i<=n; i++)
fin >> v[i];
fin >> m;
for(int i=1; i<=m; i++)
{
fin >> op >> x;
if(op == 0)
fout << operation0() << "\n";
if(op == 1)
fout << operation1() << "\n";
if(op == 2)
fout << operation2() << "\n";
}
return 0;
}