Pagini recente » Cod sursa (job #1689141) | Cod sursa (job #3220942) | Cod sursa (job #2466899) | Cod sursa (job #2445012) | Cod sursa (job #1484074)
#include <fstream>
using namespace std;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
int n,a[100],x,m,c;
int st,dr,cmij;
int caut_bin0(int val, int st, int dr, int cmij)
{ int mij,ok=0;
// if(a[dr]==val)return dr;
while(st <= dr && ok==0)
{ if(a[dr]==val)return dr;
mij=(st+dr)/2;
if(a[mij]==val)ok=1;
if(a[mij]<val)st=mij+1;
else dr= mij-1;
}
if(!ok)return -1;
if(cmij == mij)return mij;
else{ cmij=mij;
st=mij;dr=n;
caut_bin0(val,st,dr,cmij);
}
}
int caut_bin1(int val, int st, int dr, int cmij)
{ int mij,ok=0;
// if(a[dr]<=val)return dr;
while(st <= dr && ok==0)
{ if(a[dr]<=val)return dr;
mij=(st+dr)/2;
if(a[mij]<=val)ok=1;
if(a[mij]<val)st=mij+1;
else dr= mij-1;
}
if(!ok)return -1;
if(cmij == mij)return mij;
else{ cmij=mij;
st=mij;dr=n;
caut_bin1(val,st,dr,cmij);
}
}
int caut_bin2(int val, int st, int dr, int cmij)
{ int mij,ok=0;
// if(a[st]>=val)return st;
while(st <= dr && ok==0)
{ if(a[st]>=val)return st;
mij=(st+dr)/2;
if(a[mij]>=val)ok=1;
if(a[mij]<val)st=mij+1;
else dr= mij-1;
}
if(!ok)return -1;
if(cmij == mij)return mij;
else{ cmij=mij;
dr=mij;st=1;
caut_bin2(val,st,dr,cmij);
}
}
int main()
{
fin>>n;
for(int i=1; i<=n; i++)fin>>a[i];
fin>>m;
st=1,dr=n,cmij=-1;
for(int i=1; i<=m ;i++)
{ fin>>c>>x;
if(c==0)fout<<caut_bin0(x,st,dr,cmij)<<endl;
if(c==1)fout<<caut_bin1(x,st,dr,cmij)<<endl;
if(c==2)fout<<caut_bin2(x,st,dr,cmij)<<endl;
}
return 0;
}