Pagini recente » Cod sursa (job #2052351) | Cod sursa (job #3250486) | Cod sursa (job #2904436) | Cod sursa (job #3256936) | Cod sursa (job #804133)
Cod sursa(job #804133)
#include <fstream>
#define NMAX 100001
using namespace std;
long v[NMAX],n,m;
ifstream in("cautbin.in");
ofstream out("cautbin.out");
void scan()
{
in>>n;
for (int i=1;i<=n;i++)
in>>v[i];
in>>m;
}
int cautbin(long x)
{
long st,dr,p=1,poz,sol;
st=0;
dr=n;
for (p=1;p<=dr;p<<=1);
p>>=1;
poz=p;
while (p)
{
for(;st+p>dr;p>>=1);
poz=st+p;
if (x==v[poz])
p>>=1;
else if (x<v[poz])
{
p>>=1;
continue;
}
st=poz;
}
return st+p;
}
int main()
{
long x,poz,k;
scan();
for (int i=1;i<=m;i++)
{
in>>k>>x;
poz=cautbin(x);
if (k==0)
if (v[poz]==x)
out<<poz<<"\n";
else out<<"-1\n";
else
if (k==1)
out<<poz<<"\n";
else
{
int j;
for (j=poz;j>=1 && v[j]==x;j--);
out<<j+1<<"\n";
}
}
return 0;
}