Pagini recente » Cod sursa (job #1603690) | Istoria paginii runda/cel_mai_mare_olimpicar_2019_oni2009_zi2/clasament | Cod sursa (job #2156842) | Istoria paginii utilizator/nicoleta114 | Cod sursa (job #2458129)
#include <bits/stdc++.h>
using namespace std;
ifstream in("cautbin.in");
ofstream out("cautbin.out");
int v[100001];
int cautbin(int start,int stop,int termen)
{
bool ok=0;
int poz=-1,mid;
while(!ok&&start<=stop)
{
mid=(start+stop)/2;
if(v[mid]==termen)
{
poz=mid;
ok=1;
}
else if(v[mid]>termen)
stop=mid-1;
else
start=mid+1;
}
return poz;
}
int main()
{
int n,m,i,j;
in>>n;
for(i=0;i<n;i++)
in>>v[i];
in>>m;
int a,b,poz;
for(j=1;j<=m;j++)
{
in>>a>>b;
if(a==0)
{
poz=cautbin(0,n-1,b);
while(v[poz+1]==v[poz])
{
poz++;
}
if(poz!=-1)
out<<poz+1<<'\n';
else
out<<-1<<'\n';
}
if(a==1)
{
poz=cautbin(0,n-1,b);
while(v[poz+1]==v[poz])
{
poz++;
}
if(poz==-1)
{
poz=0;
while(v[poz]<b &&poz<n)
{
poz++;
}
out<<poz<<'\n';
}
else
out<<poz+1<<'\n';
}
if(a==2)
{
poz=cautbin(0,n-1,b);
if(poz==-1)
{
poz=0;
while(poz<b&&poz<n)
{
if(v[poz]>b)
{
out<<poz+1<<'\n';
break;
}
poz++;
}
}
else
{
while(v[poz-1]==v[poz])
{
poz--;
}
out<<poz+1<<'\n';
}
}
}
return 0;
}