Pagini recente » Cod sursa (job #1097028) | Cod sursa (job #530668) | Cod sursa (job #3147907) | Cod sursa (job #2663319) | Cod sursa (job #614670)
Cod sursa(job #614670)
#include <fstream>
using namespace std;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
int v[100002] , n , m , x , tip;
int cautbin0(int left,int right)
{
int mid = left + (right-left)/2;
if(left>right) return -1;
if(v[mid]==x)
{
while(v[mid+1]==x) mid++;
return mid;
}
if(x>v[mid])
return cautbin0(mid+1,right);
return cautbin0(left,mid-1);
}
int cautbin1(int left,int right)
{
int mid = left + (right-left)/2;
if(v[mid+1]>x && v[mid]<x) return mid;
if(v[mid]==x)
{
while(v[mid+1]==x) mid++;
return mid;
}
else
if(x>v[mid])
return cautbin1(mid+1,right);
return cautbin1(left,mid-1);
}
int cautbin2(int left,int right)
{
int mid = left + (right-left)/2;
if(v[mid]>x && v[mid-1]<x) return mid;
if(v[mid]==x)
{
while(v[mid-1]==x) mid--;
return mid;
}
else
if(x>v[mid])
return cautbin2(mid+1,right);
return cautbin2(left,mid-1);
}
int main()
{
fin>>n;
for(int i=1;i<=n;++i)
fin>>v[i];
fin>>m;
for(;m;m--)
{
fin>>tip>>x;
if(tip==0) fout<<cautbin0(1,n)<<'\n';
else
if(tip==1) fout<<cautbin1(1,n)<<'\n';
else
fout<<cautbin2(1,n)<<'\n';
}
return 0;
}