Pagini recente » Cod sursa (job #1564442) | Cod sursa (job #2387417) | Cod sursa (job #2602894) | Cod sursa (job #186137) | Cod sursa (job #914220)
Cod sursa(job #914220)
#include <cstdio>
#define NMAX 100001
using namespace std;
int n;
int a[NMAX];
void read()
{
scanf("%d\n", &n);
for(int i = 1; i <= n; ++ i)
scanf("%d ", &a[i]);
}
int Zero(int x)
{
int st = 1;
int dr = n;
int mij;
while(st <= dr)
{
mij = ((st - dr) >> 1) + dr;
if(x == a[mij] && (x != a[mij + 1] || mij == n))
return mij;
if(x < a[mij])
dr = mij - 1;
else
st = mij + 1;
}
return -1;
}
int Unu(int x)
{
int st = 1;
int dr = n;
int mij;
while(st <= dr)
{
mij = ((st - dr) >> 1) + dr;
if(x >= a[mij] && (x < a[mij + 1] || mij == n))
return mij;
if(x < a[mij])
dr = mij - 1;
else
st = mij + 1;
}
return -1;
}
int Doi(int x)
{
int st = 1;
int dr = n;
int mij;
while(st <= dr)
{
mij = ((st - dr) >> 1) + dr;
if(x <= a[mij] && (x > a[mij - 1] || mij == 1))
return mij;
if(x > a[mij])
st = mij + 1;
else
dr = mij - 1;
}
return -1;
}
int main()
{
int m;
int c;
int x;
freopen("cautbin.in", "r", stdin);
freopen("cautbin.out", "w", stdout);
read();
scanf("%d\n", &m);
while(m --)
{
scanf("%d %d\n", &c, &x);
if(c == 0)
printf("%d\n", Zero(x));
else
if(c == 1)
printf("%d\n", Unu(x));
else
printf("%d\n", Doi(x));
}
return 0;
}