Remco Evenepoel sealed victory at the Volta ao Algarve in style as he beat Rohan Dennis to win the final stage.
The 20-year-old finished 10 seconds ahead of the Team Ineos rider to clinch his second stage win of the tour.
Groupama-FDJ rider Stefan Küng finished third in the final stage ahead of Bora-Hansgrohe's Max Schachmann, who came second in the general classification.
Geraint Thomas ended up 12th in the final stage as he finished his first race back after the off-season.
The Welshman came 21st overall.
Miguel Ángel López came third in the general classification for Astana, finishing just a second behind Schachmann.
Team Ineos topped the team classification by 25 seconds to UAE Team Emirates.
Ben Swift finished 20th in the general classification, 11 seconds ahead of team-mate Thomas, while Luke Rowe finished in 126th.
Stage five results
1. Remco Evenepoel (Bel/Deceuninck-Quickstep) 24mins 07secs
2. Rohan Dennis (Aus/Team Ineos) +10 secs
3. Stefan Kung (Swi/Groupama-FDJ) +19 secs
4. Max Schachmann (Ger/Bora-Hansgrohe) +38 secs
5. Miguel Angel Lopez (Col/Astana) same time
6. Michal Kwiatkowski (Pol/Team Ineos)
7. Patrick Bevin (NZ/CCC)
8. Yves Lampaert (Bel/Deceuninck-Quickstep) +46 secs
9. Nils Politt (Ger/Israel Start-Up Nation) +47 secs
10. Mads Wurtz Schmidt (Den/Israel Start-Up Nation) +48 secs
Final general classification
1. Remco Evenepoel (Bel/Deceuninck-Quickstep) 19hrs 23mins 42secs
2. Max Schachmann (Ger/Bora-Hansgrohe) +38 secs
3. Miguel Angel Lopez (Col/Astana) +39 secs
4. Rui Costa (Por/UAE Team Emirates) +56 secs
5. Tim Wellens (Bel/Lotto-Soudal) +1 min 17 secs
6. Simon Geschke (Ger/CCC) + 1 min 18 secs
7. Lennard Kamna (Ger/Bora-Hansgrohe) +1 min 26 secs
8. Bauke Mollema (Ned/Trek-Segafredo) +1 min 31 secs
9. Joao Almeida (Por/Deceuninck-Quickstep) +1 min 40 secs
10. Amaro Antunes (Por/W52-FC Porto) +1 min 57 secs