Pagini recente » Cod sursa (job #2306526) | Cod sursa (job #2871877) | Cod sursa (job #704962) | Cod sursa (job #46865) | Cod sursa (job #2623519)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("cautbin.in");
ofstream out("cautbin.out");
int v[100001],x,y,n,m;
int caut(int s,int d,int x)
{
if(s>d)
return -1;
else
{
int m=(s+d)/2;
if(x==v[m] && v[m+1]!=x)
return m;
if(x < v[m])
return caut(s,m-1,x);
if(x> v[m] || v[m+1]==x)
return caut(m+1,d,x);
}
}
int caut2(int s,int d,int x)
{
int m;
while(s<d)
{
m=(s+d)/2;
if(v[m]<=x)
s=m+1;
else d=m;
}
m=(s+d)/2;
if(v[m]>x)
m=m-1;
return m;
}
int caut3(int s,int d,int x)
{
int m;
while (s<d)
{
m=(s+d)/2;
if(v[m]<x)
s=m+1;
else d=m;
}
m=(s+d)/2;
if(v[m]<x)
m=m+1;
return m;
}
int main()
{
f>>n;
for(int i=1;i<=n;i++)
f>>v[i];
f>>m;
for(int i=1;i<=m;i++)
{
f>>y>>x;
if(y==1)
{
out<<caut2(1,n,x);
out<<'\n';
}
if(y==2)
{
out<<caut3(1,n,x);
out<<'\n';
}
if(y==0)
{
out<<caut(1,n,x);
out<<'\n';
}
}
return 0;
}