¿Existe una estructura de datos para mantener una lista ordenada que admita las siguientes operaciones en tiempo amortizado?
GetElement (k) : devuelve el elemento de la lista.
InsertAfter (x, y) : inserte el nuevo elemento y en la lista inmediatamente después de x.
Eliminar (x) : Eliminar x de la lista.
Para las dos últimas operaciones, puede suponer que x se proporciona como un puntero directamente en la estructura de datos; InsertElement devuelve el puntero correspondiente para y. InsertAfter (NULL, y) inserta y al principio de la lista.
Por ejemplo, comenzando con una estructura de datos vacía, las siguientes operaciones actualizan la lista ordenada como se muestra a continuación:
- InsertAfter (NULL, a) [una]
- InsertAfter (NULL, b) [b, a]
- Insertar después (b, c) [b, c, a]
- Insertar después (a, d) [b, c, a, d]
- Eliminar (c) [malo]
Después de estas cinco actualizaciones, GetElement (2) debería devolver d, y GetElement (3) debería devolver un error.