Pagini recente » Cod sursa (job #2217924) | Cod sursa (job #2642131) | Cod sursa (job #667200) | Cod sursa (job #1687688) | Cod sursa (job #2085967)
#include <fstream>
using namespace std;
ifstream f("cautbin.in");
ofstream g("cautbin.out");
int v[100000],x[100000],q[100000],n;
int cautbin2(int a)
{
int st,dr,mij;
st=0;
dr=n-1;
while(st<=dr)
{
mij=(st+dr)/2;
if(v[mij]<=a)
st=mij+1;
else
dr=mij-1;
}
return dr+1;
}
int cautbin1(int a)
{
int st,dr,mij;
bool sem=1;
st=0;
dr=n-1;
while(st<=dr&&sem)
{
mij=(st+dr)/2;
if(v[mij]==a)
{
st=v[mij];
sem=0;
}
else
if(v[mij]<=a)
st=mij+1;
else
dr=mij-1;
}
if(st<=dr)
{while(v[mij+1]==st&&mij<n-1)
mij++;
return mij+1;
}
return -1;
}
int cautbin3(int a)
{
int st,dr,mij;
bool sem=1;
st=0;
dr=n-1;
while(st<=dr&&sem)
{
mij=(st+dr)/2;
if(v[mij]==a)
sem=0;
else
if(v[mij]<=a)
st=mij+1;
else
dr=mij-1;
}
if(!sem)
{while(v[mij-1]==a&&mij>1)
mij--;
return mij+1;
}
else
return st+1;
}
int main()
{
int m,i,j;
f>>n;
for(i=0;i<n;i++)
f>>v[i];
f>>m;
for(i=0;i<m;i++)
f>>q[i]>>x[i];
for(i=0;i<m;i++)
{
if(q[i]==0)
g<<cautbin1(x[i])<<endl;
else
if(q[i]==1)
g<<cautbin2(x[i])<<endl;
else
g<<cautbin3(x[i])<<endl;
}
return 0;
}