Ciao Giulia,
se ho capito bene, il valore x del vettore a è valido solo se esistono due valori 'z' e 'y' del vettore b tali che z<x e y>x.
Se sai ordinare un vettore, io procederei così:
1) Ordina in modo crescente il vettore a ( Quindi avrai un vettore a del tipo [5, 7, 10, 11, 14 ..] )
2) Ordina in modo crescente il vettore b ( Quindi avrai un vettore a del tipo [2, 8, 12, 13, 19 ..] )
3) Cicla sul vettore a, per ogni valore x verifica il numero più piccolo e poi più grande del vettore b prendendo il valore più piccolo dall'inizio, poi il più grande dalla fine.
Ad esempio, prendi il x = 5 del vettore a, prendi z = b[0] del vettore b e verifica se z < x, se non è vero, continua a ciclare su a, se è vero continui e prendi y = b[99] del vettore b e verifica se y > x. Se anche questo controllo è vero, allora x è valido e lo aggiungi nel vettore c, poi salvi in d il puntatore all'ultimo valore di c.
Ordinando i due vettori eviterai di ciclare fino a 500x100 volte i vettori.
In alternativa a questo metodo, senza usare l'ordinamento:
1) Cicla sul vettore a, x è il valore corrente nel ciclo di a.
2) In ogni ciclo inizializza due variabili temporanee di lavoro, z int = 0 e y = 0
3) Cicla sul vettore b, supponiamo che k sia il valore corrente nel ciclo di b, se k < x e z = 0, allora z = k altrimenti se k > x allora y = k.
4) Prima di passare al valore k successivo, controlla se sia z che y sono state valorizzate. Se si, puoi interrompere il ciclo e considerare buono x
Spero di essere stato abbastanza chiaro