Pagini recente » Cod sursa (job #448665) | Cod sursa (job #2675758) | Cod sursa (job #2829127) | Cod sursa (job #2941522) | Cod sursa (job #3248960)
#include <iostream>
#include <fstream>
std::ifstream fin("cautbin.in");
std::ofstream fout("cautbin.out");
struct cerinte{
int index;
int nr;
};
int cerinta_0(int *sir, int nr, int n){
int dr = n, st = 1;
int mij;
while(st<=dr){
mij = st + (dr - st)/2;
if(nr == sir[mij] && sir[mij+1] != nr)
return mij;
else if(nr >= sir[mij])
st = mij+1;
else
dr = mij - 1;
}
return -1;
}
int cerinta_1(int *sir, int nr, int n){
int dr = n, st = 1;
int mij;
int max = 0;
if(nr < sir[n]){
while(st<=dr){
mij = st + (dr - st)/2;
if(nr == sir[mij] && sir[mij+1] != nr)
return mij;
if(dr - st == 1 && dr != nr)
return st;
if(nr >= sir[mij])
st = mij + 1;
else
dr = mij -1;
}
}
}
int cerinta_2(int *sir, int nr, int n){
int dr = n, st = 1;
int mij;
while(st<=dr){
mij = st + (dr - st)/2;
if(sir[mij] == nr && sir[mij - 1] != nr)
return mij;
if(dr - st == 1 && st != nr)
return dr;
if(nr <= sir[mij])
dr = mij;
else
st = mij;
}
}
int main()
{
int n,m;
fin >> n;
int sir[n+2];
for(int i=1; i<=n; i++){
fin>>sir[i];
}
fin>>m;
struct cerinte lista[m+1];
for(int i=1; i<=m; i++){
fin>>lista[i].index;
fin>>lista[i].nr;
if(lista[i].index == 0)
fout<<cerinta_0(sir, lista[i].nr, n)<<'\n';
if(lista[i].index == 1)
fout<<cerinta_1(sir, lista[i].nr, n)<<'\n';
if(lista[i].index == 2)
fout<<cerinta_2(sir, lista[i].nr, n)<<'\n';
}
// for(int i=1; i<=m; i++){
// fout<<lista[i].index<<' ';
// fout<<lista[i].nr<<'\n';
// }
return 0;
}