Pagini recente » Cod sursa (job #876992) | Rating Petre OMpirescu (sunt_grozav) | Cod sursa (job #3194749) | Cod sursa (job #1845223) | Cod sursa (job #1498069)
#include <fstream>
#include <iostream>
using namespace std;
ifstream f("cautbin.in");
ofstream g("cautbin.out");
int v[100005],li,ls,n,gasit,mij;
int dr(int x)
{
li=1;
ls=n;
gasit=0;
while(li<ls && gasit==0)
{
mij=(li+ls)/2;
if(v[mij]==x)
gasit=1;
else if(x>v[mij])
li=mij+1;
else
ls=mij-1;
}
if(v[mij-1]==x)
while(v[mij-1]==x)
mij--;
return mij;
}
int st(int x)
{
li=1;
ls=n;
gasit=0;
while(li<ls && gasit==0)
{
mij=(li+ls)/2;
if(v[mij]==x)
gasit=1;
else if(x>v[mij])
li=mij+1;
else
ls=mij-1;
}
if(gasit==0)
return -1;
while(v[mij+1]==x )
mij++;
return mij;
}
int st2(int x)
{
li=1;
ls=n;
gasit=0;
while(li<ls && gasit==0)
{
mij=(li+ls)/2;
if(v[mij]==x)
gasit=1;
else if(x<v[mij])
ls=mij-1;
else
li=mij+1;
}
mij=(li+ls)/2;
while(v[mij+1]==x )
mij++;
return mij;
}
int main()
{
int i,o,m,x;
f>>n;
for(i=1; i<=n; i++)
f>>v[i];
f>>m;
for(i=1; i<=m; i++)
{
f>>o>>x;
if(o==0)
g<<st(x)<<'\n';
if(o==1)
g<<st2(x)<<'\n';
if(o==2)
g<<dr(x);
}
return 0;
}