More than one million people have taken part in protests in about 100 cities across Brazil, the latest in a wave of demonstrations.
Violence erupted in many places and an 18-year-old man died when a car drove through a barricade in Sao Paulo state.
Protests began more than a week ago over high transport fares but are also highlighting corruption and the cost of next year’s football World Cup.
President Dilma Rousseff called off a trip to Japan to deal with the crisis.
She has called an emergency meeting of her cabinet for Friday to discuss the unrest.
The newspaper Folha de Sao Paulo, citing official figures, said that more than one million people had taken part in Thursday’s demonstrations.
Brazilian media said there were protests in more than 100 cities.
In Rio de Janeiro riot police fired tear gas and rubber bullets at groups of masked young men trying to approach the City Hall late on Thursday. At least 29 people were reported injured.
Rio authorities sealed off the state legislature building, the state governor’s office, Guanabara Palace and the mayor’s office.
TV images showed gangs looting shops in the city centre – although many Rio shopkeepers and banks had put up wooden hoardings to protect their premises.
In the capital, Brasilia, demonstrators started a small fire at the entrance to the foreign ministry and were driven back by police using rubber bullets and tear gas.
Other government buildings in the city were attacked and riot police used tear gas and rubber bullets to scatter the crowds. About 26 people were reported injured.
There were also clashes outside a football stadium in Salvador ahead of a Confederations Cup match between Nigeria and Uruguay.
More clashes were reported in Porto Alegre in the south, Campinas north of Sao Paulo and in the north-eastern city of Salvador.
The 18-year-old man killed in the city of Ribeirao Preto was the first person reported to have died in the protests. The motorist who drove through the barricade is said to have fled the scene.
In Sao Paulo, police said 100,000 people had gathered on the city’s landmark Avenida Paulista.
Members of the city’s Free Access Movement (Movimento Passe Livre) – which has been campaigning for better public transport – earlier pledged to take to the streets “to celebrate” the reversal of a public-transport fare increase.
The protests, originally triggered by the increase on 2 June, have since grown into a much wider movement.
Protesters are angry at corruption and poor public services as well as the huge cost of next year’s football World Cup, saying the government should also invest in education and healthcare.
Previous Confederations Cup matches have drawn protests, with demonstrators expressing their anger at steep ticket prices and the money spent on the Confederations Cup, the 2014 World Cup and the 2016 Rio Olympics.
Sao Paulo Mayor Fernando Haddad said Wednesday’s reversal of the fare rise was a “big sacrifice”, which meant other investments would have to be cut.
Sao Paulo and Rio are the latest two cities to reverse such increases after similar moves by the authorities in Cuiaba, Recife and Joao Pessoa.