Pagini recente » Cod sursa (job #687894) | Cod sursa (job #2553730) | Cod sursa (job #401103) | Cod sursa (job #2975201) | Cod sursa (job #2418373)
#include <iostream>
#include<fstream>
using namespace std;
ifstream in("cautbin.in");
ofstream out("cautbin.out");
int n,m,elem[100000];
void read()
{
in>>n;
for(int i=0; i<n; i++)
{
in>>elem[i];
}
}
int f1(int x)
{
int index=-1;
int st=0,dr=n-1,middle,aux;
while(st<dr)
{
middle=(st+dr)/2;
aux=elem[middle];
if(aux==x)
index=max(index,middle);
if(aux<=x)
st=middle+1;
else if(aux>x)
dr=middle;
if(st==dr &&elem[st]==x)
{
index=max(index,st);
}
}
return index;
}
int f2(int x)
{
int st=0,dr=n-1,middle,aux;
int to_return=-1;
while(st<dr)
{
middle=(st+dr)/2;
aux=elem[middle];
if(aux<=x)
{
to_return=max(to_return,middle);
}
if(x>aux)
{
st=middle+1;
}
else
dr=middle;
}
if(elem[st]<=x)
to_return=max(to_return,st);
return to_return;
}
int f3(int x)
{
int st=0,dr=n-1,middle,aux;
while(st<dr)
{
middle=(st+dr)/2;
aux=elem[middle];
if(x>aux)
{
st=middle+1;
}
else
dr=middle;
}
return st;
}
void solve()
{
int aux,tip;
in>>m;
for(int i=0; i<m; i++)
{
in>>tip>>aux;
if(tip==0)
{
int p=f1(aux);
if(p==-1)
out<<-1<<'\n';
else
out<<p+1<<'\n';
}
else if(tip==1)
{
out<<f2(aux)+1<<'\n';
}
else
out<<f3(aux)+1<<'\n';
}
}
int main()
{
read();
solve();
}