Pagini recente » Cod sursa (job #1860429) | Cod sursa (job #410002) | Cod sursa (job #2227734) | Cod sursa (job #2190887) | Cod sursa (job #819535)
Cod sursa(job #819535)
#include <fstream>
using namespace std;
ifstream in ("cautbin.in");
ofstream out("cautbin.out");
int const N=100005;
int n,x,v[N],a,b;
int cautb0 (int x)
{
int poz=0;
for(int i=1<<30;i>0;i=i>>1)
if((poz+i<=n)&&(x>=v[poz+i])) poz+=i;
if(v[poz]!=x) return -1; // a==0
return poz;
}
int cautb1 (int x)
{
int poz=0;
for(int i=1<<30;i>0;i=i>>1)
if((poz+i<=n)&&(x>=v[poz+i])) poz+=i;
return poz;
}
int cautb2 (int x)
{
int poz=0;
for(int i=1<<30;i>0;i=i>>1)
if((poz+i<=n)&&(x>v[poz+i])) poz+=i;
return poz+1;
}
int main()
{
in>>n; for(int i=1;i<=n;i++) in>>v[i];
in>>x; for(int i=1;i<=x;i++)
{
in>>a>>b;
switch(a)
{
case 0: out<<cautb0(b)<<"\n"; break;
case 1: out<<cautb1(b)<<"\n"; break;
default:out<<cautb2(b)<<"\n"; break;
}
}
return 0;
}