Pagini recente » Cod sursa (job #1271600) | Cod sursa (job #2815271) | Cod sursa (job #3160181) | Cod sursa (job #486433) | Cod sursa (job #2855577)
#include <fstream>
#define N 100005
using namespace std;
ifstream fin ("cautbin.in");
ofstream fout ("cautbin.out");
int a[N], n;
int last_x(int x)
{
int st=1, dr=n, m;
while (st<=dr)
{
m=(st+dr)/2;
if (x<a[m]) dr=m-1;
else st=m+1;
}
if (a[dr]==x) return dr;
else return -1;
}
int last_sx(int x)
{
int st=1, dr=n, m;
while (st<=dr)
{
m=(st+dr)/2;
if (x<a[m]) dr=m-1;
else st=m+1;
}
return dr;
}
int first_bx(int x)
{
int st=1, dr=n, m;
while (st<=dr)
{
m=(st+dr)/2;
if (x>a[m]) st=m+1;
else dr=m-1;
}
return st;
}
int main()
{
fin>>n;
for (int i=1; i<=n; ++i) fin>>a[i];
int m, x, tip;
fin>>m;
for (int i=1; i<=m; ++i)
{
fin>>tip>>x;
if (tip==0) fout<<last_x(x)<<'\n';
if (tip==1) fout<<last_sx(x)<<'\n';
if (tip==2) fout<<first_bx(x)<<'\n';
}
return 0;
}