Problema con C++

Zin

Tengo varias dudas sobre un programa que necesito realizar:

Problema

Esto es lo que llevo hasta ahora

spoiler

Las dudas que me surgen son las siguientes, al pasarle a la función DYV dos índices muy alejados me salta una violación de segmento y no sé dónde está el error. Con índices relativamente cercanos, me resuelve bien el problema.
Otra cosa que me gustaría arreglar y no sé cómo es, pasarle por el intérprete yo mismo el tamaño del array y poder trabajar de la misma manera en la que he trabajado con él en este código, o sea, definiéndolo de manera global.

Thanat0s

Tengo ese ejercicio resuelto pero con números en pseudocódigo, modificándolo minimamente sacarás lo que tu quieres.

3. Dado un vector de enteros determinar la longitud de la subsecuencia creciente más larga
funcion subseciencia(v:vector[1..N] de enteros; li,ld: enteros) devuelves res: entero
inicio
	si (li=ld) entonces
		res:=1;
	si no
		med:=(li+ld)/2;
		l1:=subsecuencia(v,li,med);
		l2:=subsecuencia(v,med+1,ld);
		l3:=0;
		i:=med;
		mientras (i>=li ^ v[i]<=v[i+1]) hacer
			l3++;
			i--;
		fmientras
		j:=med+1;
		mientras (j<=ld ^ v[j]>=v[j-1]) hacer
			l3++;
			j++;
		fmientras
		res:=max(l1,l2,l3);
	fsi
fin

Si además nos piden donde empieza y donde termina:
procedimiento subsecuencia(v:vector[1..N] de enteros; li,ld: enteros; VAR p,f,res: enteros)
inicio
	si (li=ld) entonces
		res:=1; p:=li; f:=ld;
	si no
		med:=(li+ld)/2;
		subsecuencia(v,li,med,p1,f1,res1);
		subsecuencia(v,med+1,ld,p2,f2,res2);
		l3:=0;
		i:=med;
		mientras (i>=li ^ v[i]<=v[i+1]) hacer
			l3++;
			i--;
		fmientras
		j:=med+1;
		mientras (j<=ld ^ v[j]>=v[j-1]) hacer
			l3++;
			j++;
		fmientras
		si (res1>=res2 ^ res1>=l3) entonces
			res:=res1; p:=p1; f:=f1;
		si no
			si (res2>=l3) entonces
				res:=res2; p:=p2; f:=f2;
			si no
				res:=l3; p:=i+1; f:=j-1;
			fi
		fsi
	fsi
fin
1

Usuarios habituales

  • Thanat0s
  • Zin