Pagini recente » Cod sursa (job #2585449) | Cod sursa (job #941547) | Cod sursa (job #1237834) | Cod sursa (job #2944821) | Cod sursa (job #1129771)
#include <fstream>
using namespace std;
ifstream f("cautbin.in");
ofstream q("cautbin.out");
int n,i,x,y,m, a[100002];
int bs0(int ls, int ld, int x)
{
int m;
if ((a[ls]>x)|| (a[ld]<x)) { m=-1;}
else {
while (ls<=ld)
{
m=ls+((ld-ls)/2);
if (a[m]==x)
{
while (a[m+1]==x){m++;}
return m;
}
else if (a[m]>x){ld=m-1;}
else if (a[m]<x){ls=m+1;}
}
}
return -1;
}
int bs1(int ls, int ld, int x)
{
int m;
m=-1;
while (ls<=ld)
{
m=ls+((ld-ls)/2);
if (a[m]==x)
{
while (a[m+1]==x){m++;}
return m;
}
else if (a[m]>x){ld=m-1;}
else if (a[m]<x){ls=m+1;}
}
return ls;
}
int bs2(int ls, int ld, int x)
{
int m;
m=-1;
while (ls<=ld)
{
m=ls+((ld-ls)/2);
if (a[m]==x)
{
while (a[m-1]>=x){m--;}
return m;
}
else if (a[m]<x){ls=m+1;}
else if (a[m]>x){ld=m-1;}
}
return ls-1;
}
int main()
{
f>>n;
for(i=1;i<=n;i++)
{
f>>a[i];
}
f>>m;
for (i=1;i<=m;i++)
{
f>>y>>x;
if (y==0){q<<bs0(1,n,x)<<'\n';}
else if (y==1){q<<bs1(1,n,x)<<'\n';}
else if (y==2){q<<bs2(1,n,x)<<'\n';}
}
}