Pagini recente » Cod sursa (job #2009156) | Cod sursa (job #2054402) | Flux si cuplaj | Cod sursa (job #2039040) | Cod sursa (job #2725946)
#include <bits/stdc++.h>
using namespace std;
ifstream f ("cautbin.in");
ofstream g ("cautbin.out");
void biggest_idx( int x, vector<int>& v ){
int ans = -1;
int l = 0 , r = v.size() - 1, mij = l + (r-l)/2;
while ( l <= r ) {
mij = l + (r-l)/2;
if ( v[mij] == x ){
ans = mij;
l = mij + 1;
}
else if ( v[mij] < x )
l = mij + 1;
else
r = mij - 1;
}
if ( ans != -1 )
g << ans+1 << '\n';
else g << -1 << '\n';
}
void lowest_idx( int x, vector<int>& v ){
int ans = -1;
int l = 0 , r = v.size() - 1, mij = l + (r-l)/2;
while ( l <= r ) {
mij = l + (r-l)/2;
if ( v[mij] <= x ){
ans = mij;
l = mij + 1;
}
else
r = mij - 1;
}
g << ans+1 << '\n';
}
void upper_idx( int x, vector<int>& v ){
int ans = -1;
int l = 0 , r = v.size() - 1, mij = l + (r-l)/2;
while ( l <= r ) {
mij = l + (r-l)/2;
if ( v[mij] >= x ){
ans = mij;
r = mij - 1;
}
else
l = mij + 1;
}
g << ans+1 << '\n';
}
int main()
{
int n,m,op,x;
f>>n;
vector<int> v(n,0);
for ( int i = 0 ; i < n ; i++ )
f>>v[i];
f>>m;
for ( int i = 0 ; i < m ; i++ ){
f>>op>>x;
if ( op == 0 )
biggest_idx(x,v);
else if ( op == 1 )
lowest_idx(x,v);
else upper_idx(x,v);
}
return 0;
}