Pagini recente » Cod sursa (job #2405659) | Cod sursa (job #2157677) | Cod sursa (job #1499015) | Cod sursa (job #2689657) | Cod sursa (job #1387291)
#include<iostream>
#include<fstream>
using namespace std;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
unsigned long long v[100010];
int n,m;
unsigned long long x;
void citire()
{
fin>>n;
for(int a1=1;a1<=n;a1++)
{
fin>>v[a1];
}
fin>>m;
}
void fct0(int min1,int max1)
{
int k;
if(min1!=max1)
{
k=(min1+max1)/2;
if(v[k]==x)
{
while(v[k]==x)
{
k++;
}
fout<<k-1<<'\n';
}
else if(v[k]>x)
{
fct0(min1,k);
}
else
{
fct0(k+1,max1);
}
}
else if(v[min1]==x)
{
while(v[min1]==x)
{
min1++;
}
fout<<min1-1<<'\n';
}
else fout<<"-1"<<'\n';
}
void fct1(int min1,int max1)
{
int k;
if(min1!=max1)
{
k=(min1+max1)/2;
if(v[k]==x)
{
while(v[k]==x)
{
k++;
}
fout<<k-1<<'\n';
}
else if(v[k]>x)
{
fct1(min1,k);
}
else
{
fct1(k+1,max1);
}
}
else if(v[min1]==x)
{
while(v[min1]==x)
{
min1++;
}
fout<<min1-1<<'\n';
}
else
{
if(v[min1]<x)
{
fout<<min1<<'\n';
}
else fout<<min1-1<<'\n';
}
}
void fct2(int min1,int max1)
{
int k;
if(min1!=max1)
{
k=(min1+max1)/2;
if(v[k]==x)
{
while(v[k]==x)
{
k--;
}
fout<<k+1<<'\n';
}
else if(v[k]<x)
{
fct2(k+1,max1);
}
else
{
fct2(min1,k);
}
}
else if(v[min1]==x)
{
while(v[min1]==x)
{
min1--;
}
fout<<min1+1<<'\n';
}
else
{
if(v[min1]<x) fout<<min1+1<<'\n';
else fout<<min1<<'\n';
}
}
int main()
{
citire();
int t;
for(int a=1;a<=m;a++)
{
fin>>t>>x;
if(t==0) fct0(1,n);
if(t==1) fct1(1,n);
if(t==2) fct2(1,n);
}
}