Pagini recente » Istoria paginii runda/tractoare2 | Cod sursa (job #914576) | Cod sursa (job #2972542) | Sandbox (cutiuţa cu năsip) | Cod sursa (job #2290124)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
int caut0( int x, vector <int>& v ){
int stg = 0, drp = (int)v.size() - 1;
while( stg <= drp ){
int mij = ( stg + drp ) / 2;
if( v[mij] == x ){
while( ( mij < drp ) && ( v[mij+1] == x ) )
mij++;
return mij;
}
if ( v[mij] > x )
drp = mij - 1;
else
stg = mij + 1;
}
return -1;
}
int caut1( int x, vector <int>& v ){
int stg = 0, drp = (int)v.size() - 1;
while( stg <= drp ){
int mij = ( stg + drp ) / 2;
if( v[mij] == x ){
while( ( mij < drp ) && ( v[mij+1] == x ) )
mij++;
return mij;
}
if ( v[mij] > x )
drp = mij - 1;
else
stg = mij + 1;
}
return drp;
}
int caut2( int x, vector <int>& v ){
int stg = 0, drp = (int)v.size() - 1;
while ( stg <= drp ){
int mij = ( stg + drp ) / 2;
if( v[mij] == x ){
while ( ( mij > stg ) && (v[mij-1] == x ) )
mij--;
return mij;
}
if ( v[mij] > x )
drp = mij - 1;
else
stg = mij + 1;
}
return stg;
}
int main()
{
vector <int> v;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
int N;
fin >> N;
for( int i = 1; i <= N; i++ ){
int aux;
fin >> aux;
v.push_back(aux);
}
int M, poz = 0;
fin >> M;
for( int i = 1; i <= M; i++ ){
int intr, nr;
fin >> intr;
fin >> nr;
if ( intr == 0 )
poz = caut0(nr, v);
else{
if ( intr == 1 ){
poz = caut1(nr, v);
if ( v[poz] != nr ){
if ( v[poz] < nr ){
while ( v[poz] < nr ){
poz++;
}
poz++;
}else{
while ( v[poz] > nr )
poz--;
}
}
}else{
poz = caut2(nr, v);
if ( v[poz] != nr ){
if ( v[poz] > nr ){
while ( v[poz] > nr ){
poz--;
}
}else {
while ( v[poz] < nr ){
poz++;
}
poz++;
}
}
}
}
}
return 0;
}