Pagini recente » Cod sursa (job #2518253) | Cod sursa (job #163456) | Cod sursa (job #2407771) | Cod sursa (job #509584) | Cod sursa (job #1036910)
# include <iostream>
# include <fstream>
# define nmax 100000
using namespace std;
ifstream f("cautbin.in");
ofstream g("cautbin.out");
int v[nmax],n,m;
void caut0(int st, int dr, int x)
{
int mij=(st+dr)/2;
if(v[mij]==x)
{
while(v[mij+1]==x)
mij+=1;
g<<mij<<'\n';
return;
}
if(st>=dr)
{
g<<"-1"<<'\n';
return;
}
if(x<v[mij])
return caut0(st, mij-1, x);
else
return caut0(mij+1, dr, x);
}
void caut1(int st, int dr, int x)
{
int mij=(st+dr)/2;
if(v[mij]==x)
{
while(v[mij+1]==x)
mij+=1;
g<<mij<<'\n';
return;
}
if(st>=dr)
{
if(v[st]<=x)
g<<st<<'\n';
else
g<<st-1<<'\n';
return;
}
if(x<v[mij])
return caut1(st, mij, x);
else
return caut1(mij+1, dr, x);
}
void caut2(int st, int dr, int x)
{
int mij=(st+dr)/2;
if(v[mij]==x)
{
while(v[mij-1]==x)
mij-=1;
g<<mij<<'\n';
return;
}
if(st>=dr)
{
g<<st<<'\n';
return;
}
if(x<v[mij])
return caut2(st, mij, x);
else
return caut2(mij+1, dr, x);
}
int main()
{
int i;
f>>n;
for(i=1; i<=n; i++)
f>>v[i];
f>>m;
int caz,x;
for(i=1; i<=m; i++)
{
f>>caz>>x;
switch(caz)
{
case 0:
{
caut0(1,n,x);
break;
}
case 1:
{
caut1(1,n,x);
break;
}
case 2:
{
caut2(1,n,x);
break;
}
}
}
return 0;
}