Pagini recente » Cod sursa (job #1051926) | Cod sursa (job #3005604) | Cod sursa (job #869140) | Cod sursa (job #871079) | Cod sursa (job #1028776)
#include <fstream>
#include <iostream>
using namespace std;
int v[100001],n;
int cautbin0(int *v, int x)
{
int putere=(1<<30);
int poz=1;
while(putere)
{
if(poz+putere<=n&&v[poz+putere]<=x)
poz+=putere;
putere>>=1;
}
if(v[poz]==x)return poz;
else return -1;
}
int cautbin1(int *v, int x)
{
int putere=(1<<30);
int poz=1;
while(putere)
{
if(poz+putere<=n&&v[poz+putere]<=x)
poz+=putere;
putere>>=1;
}
return poz;
}
int cautbin2(int *v, int x)
{
int putere=1;
int poz=n+1;
while(putere<=n)
{
if(poz-putere>=1&&v[poz-putere]>=x)
poz-=putere;
putere<<=1;
}
return poz;
}
int main()
{
ifstream f("cautbin.in");
ofstream g("cautbin.out");
f>>n;
for(int i=1;i<=n;i++)
f>>v[i];
int k,x,tip;
cout<<cautbin2(v,4);
f>>k;
for(int i=0;i<k;i++)
{
f>>tip;
f>>x;
switch(tip)
{
case 0:
g<<cautbin0(v,x)<<'\n';
break;
case 1:
g<<cautbin1(v,x)<<'\n';
break;
case 2:
g<<cautbin2(v,x)<<'\n';
break;
default:
break;
}
}
return 0;
}