Pagini recente » Cod sursa (job #9084) | Cod sursa (job #2228934) | Cod sursa (job #1749880) | Cod sursa (job #62984) | Cod sursa (job #614645)
Cod sursa(job #614645)
#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(v[mid]==x)
{
while(v[mid+1]==x && mid+1<=n) mid++;
return mid;
}
else
if(left>=right) return -1;
if(x>v[mid])
return cautbin0(mid,right);
return cautbin0(left,mid);
}
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+1<=n) mid++;
return mid;
}
else
if(x>v[mid])
return cautbin1(mid,right);
return cautbin1(left,mid);
}
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-1>=1) mid--;
return mid;
}
else
if(x>v[mid])
return cautbin2(mid,right);
return cautbin2(left,mid);
}
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;
}