Pagini recente » Cod sursa (job #2186128) | Cod sursa (job #2141387) | Cod sursa (job #225874) | Cod sursa (job #362250) | Cod sursa (job #2167940)
#include <iostream>
#include <fstream>
#define NMAX 100005
using namespace std;
ifstream f("text.in");
ofstream g("text.out");
int a[NMAX];
int n, m, p, x;
void citeste()
{
f>>n;
for(int i = 1;i <= n;i++)
f>>a[i];
f>>m;
}
int zero(int x)
{
int st = 1, dr = n;
int sol = - 1;
while(st <= dr && sol==-1)
{
int mid = st + (dr - st)/2;
if(a[mid] == x && a[mid + 1] != x)
sol = mid;
else if(x >= a[mid])
st = mid + 1;
else dr = mid - 1;
}
return sol;
}
int unu(int x)
{
int st = 1, dr = n;
int sol = - 1;
while(st <= dr && sol==-1)
{
int mid = st + (dr - st)/2;
if(a[mid] <= x && (a[mid + 1] > x || mid + 1 > n))
sol = mid;
else if(x >= a[mid])
st = mid + 1;
else dr = mid - 1;
}
return sol;
}
int doi(int x)
{
int st = 1, dr = n;
int sol = - 1;
while(st <= dr && sol==-1)
{
int mid = st + (dr - st)/2;
if(a[mid] >= x && (a[mid-1] < x) || mid - 1 < 1)
sol = mid;
else if(x > a[mid])
st = mid + 1;
else dr = mid - 1;
}
return sol;
}
void solve()
{
for(int i = 1;i <= m;i++){
f>>p>>x;
if(p==0)
g<<zero(x)<<'\n';
else if(p == 1)
g<<unu(x)<<'\n';
else g<<doi(x)<<'\n';
}
}
int main()
{
citeste();
solve();
}