fork download
  1. #include <iostream>
  2. #include <map>
  3. #include <vector>
  4. #include <algorithm>
  5. using namespace std;
  6.  
  7. struct E{
  8. long long int to,time;
  9. };
  10.  
  11. map<long long int,long long int> dp;
  12. vector<long long int> vs;
  13. map<long long int,E> ms;
  14.  
  15. int main() {
  16. long long int l,n;
  17. cin>>l>>n;
  18. vs.push_back(0);
  19. for(int i=0;i<n;i++){
  20. E e1;
  21. long long int from;
  22. cin>>from>>e1.to>>e1.time;
  23. e1.to+=from;
  24. vs.push_back(from);
  25. vs.push_back(e1.to);
  26. ms[from]=e1;
  27. }
  28. sort(vs.begin(),vs.end());
  29. long long int ans=l;
  30. dp[0]=0;
  31.  
  32. for(int i=0;i<vs.size();i++){
  33. long long int p1=vs[i];
  34. long long int c1=dp[p1];
  35. auto it=ms.upper_bound(p1);
  36. if(it==ms.end()){
  37. long long int c2=c1+(l-p1);
  38. if(c2<ans)ans=c2;
  39. }else{
  40. long long int p2=(*it).first;
  41. long long int c2=c1+(p2-p1);
  42. if(dp.find(p2)==dp.end()){
  43. dp[p2]=c2;
  44. }else if(c2<dp[p2]){
  45. dp[p2]=c2;
  46. }
  47. }
  48. if(ms.find(p1)!=ms.end()){
  49. E e2=ms[p1];
  50. long long int c2=c1+e2.time;
  51. long long int p2=e2.to;
  52. if(dp.find(p2)==dp.end()){
  53. dp[p2]=c2;
  54. }else if(c2<dp[p2]){
  55. dp[p2]=c2;
  56. }
  57. }
  58. //cout<<ans<<endl;
  59. }
  60. cout<<ans<<endl;
  61. return 0;
  62. }
Success #stdin #stdout 0.01s 5328KB
stdin
10 3
2 2 1
4 2 1
8 1 1
stdout
8