Pagini recente » Cod sursa (job #1967095) | Cod sursa (job #596506) | Cod sursa (job #1845945) | Cod sursa (job #2571884) | Cod sursa (job #1329468)
#include<fstream>
using namespace std;
ofstream g("cautbin.out");
unsigned a[100000],i,n;
int cautbinar(unsigned int key)
{int imax,imin,imid;imax=n-1;imin=0;
while(imin<imax)
{imid=(imax+imin)/2;
if(a[imid]<key)
imin=imid+1;
else imax=imid;
}
if(a[imin]==key)
return imin;
else return -1;
}
inline void valmax(int imid)
{int i=imid;while(a[i]==a[imid]&&i<=n-1)++i;g<<i<<'\n';}
void caut(unsigned int x,unsigned int y)
{int d;d=cautbinar(y);
switch(x){
case 0:
if(d!=-1)
valmax(d);
else g<<-1<<'\n';
break;
case 1:
if(d!=-1)
valmax(d);
else {int b=-1;
for(unsigned int j=y-1;j>=a[0]&&b==-1;--j)
b=cautbinar(j);g<<b+1<<'\n';}
break;
case 2:
if(d!=-1)
{int i=d;while(a[i]==a[d]&&i>=0)--i;g<<i+2<<'\n';}
else {int b=-1;for(int j=y+1;j<=a[n-1]&&b==-1;++j)
b=cautbinar(j);g<<b+1<<'\n';}
break;
}
}
int main()
{ifstream f("cautbin.in");
unsigned int m,x,y;
f>>n;
for(i=0;i<n;++i)
f>>a[i];
f>>m;
for(i=0;i<m;++i)
{f>>x>>y;caut(x,y);}
}