Pagini recente » Cod sursa (job #1664845) | Cod sursa (job #2591389) | Cod sursa (job #930190) | Cod sursa (job #1210136) | Cod sursa (job #1160960)
#include <fstream>
using namespace std;
ifstream f("cautbin.in") ;
ofstream g("cautbin.out") ;
int v[100001],k,n ;
int cautare0(int k)
{
int p,u,i,mij ;
for(i=1;i<=4;i++)
if(v[i]==k)
{
while(v[i]==k)
i++ ;
return i-1 ;
}
for(i=n;i>=n-4;i--)
if(v[i]==k)
return i ;
p=1 ;
u=n ;
while(p<u)
{
mij=p+(u-p)/2 ;
if(v[mij]==k)
{
while(v[mij]==k)
mij++ ;
return mij-1 ;
}
if(v[mij]<k)
p=mij+1 ;
else
u=mij-1 ;
}
return -1 ;
}
int cautare1(int k)
{
int p,u,i,mij,max ;
for(i=1;i<=4;i++)
if(v[i]>k)
return i-1 ;
for(i=n;i>=n-4;i--)
if(v[i]<=k)
return i ;
p=1 ;
u=n ;
while(p<u)
{
mij=p+(u-p)/2 ;
if(v[mij]==k)
{
while(v[mij]==k)
mij++ ;
return mij-1 ;
}
if(v[mij]<k)
{
p=mij+1 ;
max=mij ;
}
else
u=mij-1 ;
}
return max ;
}
int cautare2(int k)
{
int p,u,i,mij,max ;
for(i=1;i<=4;i++)
if(v[i]>=k)
return i ;
for(i=n;i>=n-4;i--)
{
if(v[i]==k)
{
while(v[i]==k)
i-- ;
return i+1 ;
}
if(v[i]<k)
return i ;
}
p=1 ;
u=n ;
while(p<u)
{
mij=p+(u-p)/2 ;
if(v[mij]==k)
{
while(v[mij]==k)
mij++ ;
return mij-1 ;
}
if(v[mij]<k)
p=mij+1 ;
else
{
u=mij-1 ;
max=mij ;
}
}
return max ;
}
int main()
{
int i,a,m ;
f>>n ;
for(i=1;i<=n;i++)
f>>v[i] ;
f>>m ;
for(i=1;i<=m;i++)
{
f>>a>>k ;
if(a==0)
g<<cautare0(k)<<"\n" ;
if(a==1)
g<<cautare1(k)<<"\n" ;
if(a==2)
g<<cautare2(k)<<"\n" ;
}
return 0;
}