Pagini recente » Cod sursa (job #47749) | Cod sursa (job #42792) | Cod sursa (job #2441940) | Cod sursa (job #3216981) | Cod sursa (job #2298990)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("cautbin.in");
ofstream g("cautbin.out");
int N,v[100001];
///cea mai mare pozitie pe care se afla un element cu valoarea x
///sau -1 daca aceasta valoare nu exista
int caut0(int x)
{
int p = 1, u = N,poz=-1;
while(p <= u)
{ int mij = (p + u) / 2;
if(x == v[mij])
poz=mij;
if(x >= v[mij])
p = mij + 1;
else
u = mij - 1;
}
return poz;
}
/// cea mai mare pozitie
/// pe care se afla un element cu valoarea mai mica sau egala cu x in sir
int caut1(int x)
{
int p=1,u=N,poz=-1;
while(p<=u)
{
int m=(p+u)/2;
if(x>=v[m])
{
poz=m;
p=m+1;
}
else u=m-1;
}
return poz;
}
// cea mai mica pozitie pe care se afla
// un element cu valoarea mai mare sau egala cu x in sir
int caut2(int x)
{
int p=1,u=N,poz=-1;
while(p<=u)
{
int m=(p+u)/2;
if(x<=v[m])
{
poz=m;
u=m-1;
}
else p=m+1;
}
return poz;
}
int main()
{
int M,t,x,i;
f>>N;
for(i=1;i<=N;i++)
f>>v[i];
f>>M;
while(M--)
{
f>>t>>x;
switch(t)
{
case 0:
g<<caut0(x)<<'\n';
break;
case 1:
g<<caut1(x)<<'\n';
break;
case 2:
g<<caut2(x)<<'\n';
}
}
return 0;
}