Pagini recente » Istoria paginii runda/test_competition | Cod sursa (job #1154168) | Cod sursa (job #2669725) | Cod sursa (job #2187929) | Cod sursa (job #1167482)
#include<cstdio>
#include<algorithm>
using namespace std;
const int NMAX = 100000+5;
void Read(),Solve();
int N,M;
int V[NMAX];
int BS(int value)
{
int left,right,middle,ans = -1;
for(left = 1, right = N; left <= right; )
{
middle = (left + right)/2;
if(V[middle] == value) ans = middle;
if(V[middle] <= value) left = middle + 1;
else right = middle - 1;
}
return ans;
}
int LB(int value)
{
int left,right,middle,ans = -1;
for(left = 1, right = N; left <= right; )
{
middle = (left + right)/2;
if(V[middle] <= value) ans = max(ans, middle), left = middle + 1;
else right = middle - 1;
}
return ans;
}
int UB(int value)
{
int left,right,middle,ans = N+1;
for(left = 1, right = N; left <= right; )
{
middle = (left + right)/2;
if(V[middle] < value) left = middle + 1;
else ans = min(ans, middle), right = middle - 1;
}
return ans;
}
int main()
{
Read();
Solve();
return 0;
}
void Read()
{
int i;
freopen("cautbin.in","r",stdin);
freopen("cautbin.out","w",stdout);
scanf("%d",&N);
for(i = 1; i <= N; i++)
scanf("%d",&V[i]);
scanf("%d",&M);
}
void Solve()
{
int t,x;
for(; M; --M)
{
scanf("%d%d",&t,&x);
if(t==0) printf("%d\n",BS(x));
else if(t==1) printf("%d\n",LB(x));
else printf("%d\n",UB(x));
}
}