Disposem d’una llista ordenada de
nombres
i d’un nombre
tal que
.
Es demana una funció effi_last_pos amb un codi
molt eficient que calculi l’última posició
tal que
.
La funció ha d’estar convenientment documentada i s’ha d’utilitzar per
completar el següent programa.
#include <iostream>
#include <vector>
using namespace std;
///////////////////////////////////////////
//
// documentation and code of effi_last_pos
// function must be here
//
///////////////////////////////////////////
//gets vector v from input chanel
void read_vector(vector<int>& v) {
int n = v.size();
for (int i = 0; i < n; ++i) cin >> v[i];
}
int main() {
int n;
cin >> n;
vector<int> v(n);
read_vector(v);
int z;
while (cin >> z)
cout << effi_last_pos(v, z) << endl;
}
Punts examen: 1.750000 Part automàtica: 40.000000%
L’entrada té tres parts. En la primera apareix un nombre enter més gran que un. Després hi ha una llista de enters ordenats de menor a major . Finalment, trobem una seqüència de nombres enters. Cada número de l’última seqüència és tal que i .
Per a cada nombre de la seqüència, una línia amb l’última posició on el valor de la llista no superi a , és a dir .
Les implementacions de la funció
effi_last_pos que puguin tenir un temps
d’execució proporcional a
seran invalidades.
Input
10 11 23 34 55 55 55 55 55 55 65 55 15 48
Output
8 0 2
Input
5 123 345 1071 1100 1278 1099 345
Output
2 1
Input
30 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0
Output
28