Pagini recente » Cod sursa (job #1627813) | Cod sursa (job #2093851) | Cod sursa (job #1971987) | Cod sursa (job #2091319) | Cod sursa (job #1168523)
#include <fstream>
using namespace std;
static const int NMAX=100005;
int main()
{
int n,m,v[NMAX],i,t,nr,l,dr,mid,sol;
fstream f("cautbin.in",ios::in),g("cautbin.out",ios::out);
f>>n;
for(i=1; i<=n; ++i) f>>v[i];
f>>m;
for(i=1; i<=m; ++i)
{
f>>t>>nr;
l=1;
dr=n;
sol=-1;
if(!t)
{
while(v[l]<=nr&&v[dr]>=nr)
{
mid=(v[dr]!=v[l]) ? l+((nr-v[l])*(dr-l))/(v[dr]-v[l]) : 0;
if(v[mid]<nr) l=mid+1;
else if(v[mid]>nr) dr=mid-1;
else
{
sol=mid;
l=mid+1;
}
}
if(v[l]==nr) sol=l;
g<<sol<<'\n';
}
else if(t==1)
{
while(v[l]<=nr&&v[dr]>=nr)
{
mid=(v[dr]!=v[l]) ? l+((nr-v[l])*(dr-l))/(v[dr]-v[l]) : 0;
if(v[mid]<=nr)
{
l=mid+1;
sol=mid;
}
else dr=mid-1;
}
if(v[l]<=nr) sol=l;
g<<sol<<'\n';
}
else
{
while(v[l]<=nr&&v[dr]>=nr)
{
mid=(v[dr]!=v[l]) ? l+((nr-v[l])*(dr-l))/(v[dr]-v[l]) : 0;
if(v[mid]<nr) l=mid+1;
else
{
dr=mid-1;
sol=mid;
}
}
if(v[dr]>=nr) sol=dr;
g<<sol<<'\n';
}
}
f.close();
g.close();
return 0;
}