La solución de este problema Problema – C – Codeforces es este Ideone.com pero ¿qué está sucediendo dentro con los punteros, especialmente las líneas 27, 28, 36?

Los punteros aquí son una forma conveniente de evitar copiar y pegar. Suponga que tiene el siguiente código:

set xs, ys;
// ...
if (operation == 'X') {
xs.erase(value_to_remove);
xs.insert(value_to_insert);
cout << *xs.begin() << endl;
} else if (operation == 'Y') {
ys.erase(value_to_remove);
ys.insert(value_to_insert);
cout << *ys.begin() << endl;
}

Y ahora quieres deshacerte de esa repetición. Los punteros le ofrecen una buena solución: creemos una variable de puntero (digamos, current_set ) y hagamos que apunte a xs o ys dependiendo de la operation . Luego, hacemos todo a través de esta variable de puntero y las operaciones se realizarán con nuestros conjuntos originales:

set xs, ys;
// ...
set *current_set;
if (operation == 'X') {
current_set = &xs; // '&' is 'reference operator', means 'take address of'
} else if (operation == 'Y') {
current_set = &ys;
}
// same as xs.erase(value_to_remove), if operation == 'X'
(*current_set).erase(value_to_remove); // '*' is 'dereference operator'
current_set->insert(value_to_insert); // 'a->b' is pretty same as (*a).b
cout <begin() <' has higher priority than '*'

No dude en comentar si no he respondido su pregunta; la actualizaré si es necesario.