Pagini recente » Cod sursa (job #269083) | Cod sursa (job #1741978) | Cod sursa (job #2168499) | Cod sursa (job #427234) | Cod sursa (job #942434)
Cod sursa(job #942434)
#include <fstream>
#include <limits>
using namespace std;
long v[100001];
ifstream in("cautbin.in");
ofstream out("cautbin.out");
long search_exact(long x,long ls,long ld,long mode);
int main()
{
long n,a,b,m,c;
in>>n;
in.ignore(numeric_limits<streamsize>::max(),'\n');
for(int i=0;i<n;++i)
{
in>>v[i];
}
in>>m;
in.ignore(numeric_limits<streamsize>::max(),'\n');
for(int i=0;i<m;++i)
{
in>>a>>b;
in.ignore(numeric_limits<streamsize>::max(),'\n');
c=search_exact(b,0,n-1,a);
out<<c<<'\n';
}
in.close();
out.close();
return 0;
}
long search_exact(long x,long ls,long ld,long mode)
{
long mid=(ls+ld)/2;
if (ls==ld)
{
switch (mode)
{
case 0:
if (x==v[mid])
{
while(v[mid]==x)
mid++;
return mid+1;
}
return -1;
break;
case 1:
return mid+1;
break;
case 2:
return mid+2;
break;
default:
return 0;
}
}
if (x==v[mid])
{
switch (mode)
{
case 0:
case 1:
while(v[mid]==x)
mid++;
return mid;
break;
case 2:
while(v[mid]==x)
mid--;
return mid+2;
break;
default:
return 0;
}
}
else if (x<v[mid])
{
return search_exact(x,ls,mid-1,mode);
}
else
{
return search_exact(x,mid+1,ld,mode);
}
return -1;
}