Pagini recente » Cod sursa (job #1025408) | Cod sursa (job #2905881) | Cod sursa (job #1788573) | Cod sursa (job #968161) | Cod sursa (job #2608104)
#include <fstream>
#include <iostream>
#include <vector>
std::ifstream in ("cautbin.in");
std::ofstream out("cautbin.out");
std::vector<std::vector<long> > vec;
int n;
int case0(int val){
int nr = -1;
int lower = 0;
int upper = n - 1;
int middle;
while (lower <= upper){
middle = lower + (upper - lower)/2;
if (vec[middle][0] == val)
return vec[middle][2];
else if (vec[middle][0] > val)
upper = middle - 1;
else
lower = middle + 1;
}
return nr;
}
int case1(int val){
int nr = -1;
int lower = 0;
int upper = n - 1;
int middle;
while (lower <= upper){
middle = lower + (upper - lower)/2;
if (vec[middle][0] == val)
return vec[middle][2];
else if (vec[middle][0] > val)
upper = middle - 1;
else{
nr = vec[middle][2];
lower = middle + 1;
}
}
return nr;
}
int case2(int val){
int nr = -1;
int lower = 0;
int upper = n - 1;
int middle;
while (lower <= upper){
middle = lower + (upper - lower)/2;
if (vec[middle][0] == val)
return vec[middle][1];
else if (vec[middle][0] > val) {
nr = vec[middle][1];
upper = middle - 1;
}
else
lower = middle + 1;
}
return nr;
}
int main(){
int poz = 0;
in >> n;
int i = 1;
long val;
in >> val;
std::vector<long> actual;
actual.push_back(val);
actual.push_back(i);
actual.push_back(i);
vec.push_back(actual);
while (i < n){
i ++;
in >> val;
if (vec[poz][0] == val){
vec[poz][2] = i;
} else {
actual.clear();
actual.push_back(val);
actual.push_back(i);
actual.push_back(i);
vec.push_back(actual);
poz ++;
}
}
n = poz + 1;
int query;
in >> query;
while (query){
query --;
int operatie, val;
in >> operatie >> val;
switch (operatie) {
case 0:
out << case0(val) << "\n";
break;
case 1:
out << case1(val) << "\n";
break;
case 2:
out << case2(val) << "\n";
break;
}
}
in.close();
out.close();
return 0;
}