Pagini recente » Cod sursa (job #615480) | Cod sursa (job #2133953) | Cod sursa (job #2073675) | Cod sursa (job #759864) | Cod sursa (job #815094)
Cod sursa(job #815094)
#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-1]!=x) return -1; // a==0
return poz-1;
}
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-1;
}
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;
}