Pagini recente » Cod sursa (job #2143284) | Cod sursa (job #103778) | Cod sursa (job #2466698) | Cod sursa (job #3253348) | Cod sursa (job #2090096)
#include<iostream>
#include<fstream>
using namespace std;
ifstream si("cautbin.in");
ofstream so("cautbin.out");
int v[100005];
int n;
int c0(int x)
{
int st,dr,mij;
st=0;
dr=n;
bool gasit=false;
while(dr-st>1)
{
mij=(st+dr)/2;
if(v[mij]==x)
{
gasit=true; ///am gasit numarul
st=mij; ///nu ne oprim deoarece cautam pozitia cea mai mare
}
else
if(v[mij]>x)
dr=mij; ///valoare mai mare
else
st=mij; ///valoare mai mica
}
if(gasit)
return st;
else
return -2;
}
int c1(int x)
{
int poz=-1,st=0,dr=n,mij;
while(dr-st>1)
{
mij=(st+dr)/2;
if(v[mij]==x)
{
st=mij; ///din nou, cea mai mare pozitie
}
else
if(v[mij]>x)
dr=mij;
else
{
st=mij;
}
}
return st;
}
int c2(int x)
{
int poz=-1,st=0,dr=n,mij;
while(dr-st>1)
{
mij=(st+dr)/2;
if(v[mij]==x)
{
dr=mij; ///cautam valoarea cea mai mica de data asta
}
else
if(v[mij]>x)
{
dr=mij;
}
else
st=mij;
}
if(v[st]>=x)
return st;
else
return dr;
}
int main()
{
si>>n;
int i;
for(i=0;i<n;++i)
{
si>>v[i];
}
int m;
si>>m;
int a,b;
while(m--)
{
si>>a>>b;
if(a==0)
so<<c0(b)+1<<'\n';
else
if(a==1)
so<<c1(b)+1<<'\n';
else
so<<c2(b)+1<<'\n';
}
so.close();
return 0;
}