Pagini recente » Cod sursa (job #2262824) | Monitorul de evaluare | Cod sursa (job #662255) | Cod sursa (job #463570) | Cod sursa (job #1117801)
#include <fstream>
using namespace std;
ifstream f("cautbin.in");
ofstream g("cautbin.out");
int N, M, a[100002], tip, val;
int bs0(int val)
{
int st=1, dr=N, mij;
while (st<=dr)
{
mij=(st+dr)>>1;
if (a[mij]<=val) st=mij+1;
else dr=mij-1;
}
mij=(st+dr)>>1;
if (a[mij]>val) --mij;
if (a[mij]!=val) return -1;
else return mij;
}
int bs1(int val)
{
int st=1, dr=N, mij;
while (st<=dr)
{
mij=(st+dr)>>1;
if (a[mij]<=val) st=mij+1;
else dr=mij-1;
}
mij=(st+dr)>>1;
if (a[mij]>val) --mij;
return mij;
}
int bs2(int val)
{
int st=1, dr=N, mij;
while (st<=dr)
{
mij=(st+dr)>>1;
if (a[mij]>=val) dr=mij-1;
else st=mij+1;
}
mij=(st+dr)>>1;
if (a[mij]<val) ++mij;
return mij;
}
int main()
{
f>>N;
for (int i=1; i<=N; ++i)
f>>a[i];
f>>M;
for (int i=1; i<=M; ++i)
{
f>>tip>>val;
if (!tip) g<<bs0(val)<<'\n';
else if (tip==1) g<<bs1(val)<<'\n';
else if (tip==2) g<<bs2(val)<<'\n';
}
return 0;
}