"I was getting a little stagnant out there," he said. "It's one of those things where it's mind over matter. You've just got to fight and keep that desire going."
Alvarez played a big role in ending the marathon with his 23rd homer of the season. The drive broke a 3-3 tie as the Pirates won the longest game in the majors this season.
It took 6 hours, 7 minutes to finish, trying the longest contest by time, matching a game between Baltimore and Boston on May 6.
Both teams scored a run in the 17th, and each club used eight pitchers.
Wandy Rodriguez (8-12), who was set to start for the Pirates on Monday night at San Diego, got the win with two scoreless innings of relief. It was his first win as a reliever in 232 major league appearances.
"That was a backyard tug-of-war," Pittsburgh manager Clint Hurdle said. "We kept playing defense, we kept pitching. At the end of the day, we finally got some separation in the 19th inning.
About 9,000 fans from the original crowd of 43,412 stayed until the end.
Each team had played a marathon in recent years. St. Louis went 20 innings against the Mets on April 17, 2010, and Pittsburgh played 19 innings at Atlanta on July 26, 2011.
The Pirates improved to 4-0 in extra innings this season. They moved two games ahead of St. Louis in the race for the last wild card spot in the NL. The Cardinals have lost three of four overall.
"It was a battle all around on both sides," McCutchen said. "They came to play and we were just able to get the win.
It feels good."
Alvarez picked on a slider from Browning and drove it 408 feet.
"It felt good out of my hand," Browning said. "It just stayed up. It don't think I've ever been this disappointed. I just didn't do my job."
Both teams ran out of position players after the 18th inning.
"It was just luck," McDonald said. "You know how hard pinch hitting is? So it was pretty much luck."
St. Louis left-hander Jaime Garcia, sidelined for 64 days with a strain in his pitching shoulder, struck out a career-high 10 and did not allow an earned run in an eight-inning, 107-pitch stint. He gave up five hits, two unearned runs and did not walk a batter.
Carlos Beltran put St. Louis in front with a two-run double in the fourth, and also stole three bases, tying a career high. Beltran leads the NL with 85 RBIs.
"Twenty innings or nine innings, a loss is a loss," Beltran said. "We had the opportunities. It just didn't happen."
Pittsburgh starter Jeff Karstens gave up two runs and two hits over seven innings. He struck four and walked one.
The Pirates scored twice in the sixth to tie it on a pair of infield singles and Garcia's throwing error. Clint Barmes reached on an infield hit and Garcia mishandled a bunt attempt by Karstens. Josh Harrison drove in Barmes with a sacrifice fly and McCutchen followed with an infield single.
Hurdle said he has yet to select a starting pitcher to replace Rodriguez on Monday.
"I'll come up with something tomorrow," he said.
St. Louis 1B Allen Craig extended his hitting streak to nine games with a single in the fourth inning. ... Jon Jay snapped an 0-for-14 skid with a two-out single in the 13th. ... Garcia's 10 strikeouts are the most by a St. Louis left-hander since Mark Mulder had 12 on May 9, 2005, against Los Angeles. ... The Cardinals sent RHP Trevor Rosenthal to Triple-A Memphis prior to the game to make room for Garcia. ... St. Louis plays host to Houston in a three-game set beginning Tuesday. Adam Wainwright (11-10, 3.87) will face Lucas Harrell (10-8, 3.81) in the series opener. Wainwright drew a walk as a pinch hitter Sunday. ... Pittsburgh closes out a six-game road trip with three at San Diego starting Monday. ... Walker did not start for the fourth successive game with a dislocated pinky on his right hand. He later pinch hit. ... Molina grounded out to second to finish a 14-pitch at-bat in the fourth.
Kansas City Royals' Salvador Perez breaks Johnny Bench's catcher record with 46th HR
Salvador Perez hit his 46th home run Monday to break Johnny Bench's record for most homers by a catcher in one season.
Perez breaks Bench's record with 46th HR, KC tops Indians
— Salvador Perez hit his 46th home run, breaking Johnny Bench’s record for homers by a catcher in a season, and the Kansas City Royals beat the Cleveland Indians 7-2 Monday in the first game of a doubleheader.
Salvador Perez sets single-season HR record for catchers
Salvador Perez passes Johnny Bench for the most long balls in a season by a catcher, and he also ties Vladimir Guerrero Jr. atop the 2021 home run leaderboard.
Right fielder Adam Engel 'feels good,' will be activated by Chicago White Sox with playoffs on horizon
At long last, the White Sox will have their starting outfield back in full, as right fielder Adam Engel is set to be activated from the injured list on Tuesday, according to manager Tony La Russa.
Anthony Gose, 31, former outfielder converted to reliever, promoted by Cleveland Indians
Formerly an outfielder in the big leagues, Anthony Gose, who played for Team USA in the Tokyo Olympics, was called up from the minors by the Cleveland Indians on Monday, this time as a hard-throwing lefty reliever.
Struggling New York Yankees activate pitcher Luis Severino, send former All-Star to bullpen
Former All-Star pitcher Luis Severino was activated by the New York Yankees before Monday's series opener against the Texas Rangers and is in position to make his first major league appearance in nearly two years.