Pagini recente » Borderou de evaluare (job #366978) | Cod sursa (job #2562437) | Cod sursa (job #2859937) | Cod sursa (job #536381) | Cod sursa (job #508671)
Cod sursa(job #508671)
/*Se da un sir de numere ordonat crescator cu N elemente, si se cere sa se raspunda la M intrebari de tipul:
0 x - cea mai mare pozitie pe care se afla un element cu valoarea x
sau -1 daca aceasta valoare nu se gaseste in sir
1 x - cea mai mare pozitie pe care se afla un element cu valoarea mai mica sau egala cu x in sir.
Se garanteaza ca cel mai mic numar al sirului este mai mic sau egal decat x
2 x - cea mai mica pozitie pe care se afla un element cu valoarea mai mare sau egala cu x in sir.
Se garanteaza ca cel mai mare numar din sir este mai mare sau egal decat x
*/
#include <fstream>
#include <stdio.h>
using namespace std;
long n, s[100001];
void caut0(long x)
{
long mij,st=1,dr=n;
while (st<=dr)
{
mij=(st+dr)/2;
if (s[mij]<=x)
st=mij+1;
else
dr=mij-1;
}
mij=(st+dr)/2;
if (s[mij]>x)
mij--;
if (s[mij]==x)
printf("%ld \n",mij);
else
printf("-1 \n");
}
void caut1(long x)
{
long mij,st=1,dr=n;
while (st<=dr)
{
mij=(st+dr)/2;
if (s[mij]<=x)
st=mij+1;
else
dr=mij-1;
}
mij=(st+dr)/2;
if (s[mij]>x)
printf("%ld \n",mij-1);
else
printf("%ld \n",mij);
}
void caut2(long x)
{
long mij,st=1,dr=n;
while (st<=dr)
{
mij=(st+dr)/2;
if (s[mij]<x)
st=mij+1;
else
dr=mij-1;
}
mij=(st+dr)/2;
if (s[mij]<x)
printf("%ld \n",mij+1);
else
printf("%ld \n",mij);
}
int main()
{
long x,m,i,a;
ifstream f ("cautbin.in");
freopen("cautbin.out","w",stdout);
f>>n;
for (i=1;i<=n;i++)
f>>s[i];
f>>m;
for (i=0;i<m;i++)
{
f>>a>>x;
if (a==0)
caut0(x);
else
if (a==1)
caut1(x);
else
caut2(x);
}
}