Advertisement
Guest User

Untitled

a guest
Mar 19th, 2019
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.84 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <algorithm>
  4. #include <string>
  5. #include <set>
  6. #include <map>
  7.  
  8. using namespace std;
  9. #define x first
  10. #define y second
  11. #define all(v) v.begin(), v.end()
  12. #define int long long
  13. struct line
  14. {
  15. int k, b;
  16. line() {k = 0; b = 0;}
  17. line(int K, int B) {k = K; b = B;}
  18. };
  19.  
  20. int intersect(line f, line s)
  21. {
  22. return (f.b - s.b + s.k - f.k + 1) / (s.k - f.k);
  23. }
  24.  
  25. class cht
  26. {
  27. public:
  28. vector<line> a;
  29. vector<int> g;
  30. int i;
  31. void add(line l)
  32. {
  33. while(1)
  34. {
  35. if(a.size() == 0)
  36. {
  37. a.push_back(l);
  38. g.push_back(0);
  39. return;
  40. }
  41. if(l.k == a.rbegin()->k)
  42. {
  43. if(l.b >= a.rbegin()->b) return;
  44. a.pop_back();
  45. g.pop_back();
  46. continue;
  47. }
  48. if(intersect(l, *a.rbegin()) <= *g.rbegin())
  49. {
  50. a.pop_back();
  51. g.pop_back();
  52. continue;
  53. }
  54. g.push_back(intersect(l, *a.rbegin()));
  55. a.push_back(l);
  56. return;
  57. }
  58. }
  59. int get(int x)
  60. {
  61. if(a.size() == 0) return 1e18 + 1;
  62. x--;
  63. for(i = 0; i < a.size(); i++)
  64. {
  65. if(g[i] > x) break;
  66. }
  67. i--;
  68. return x * a[i].k + a[i].b;
  69. }
  70. };
  71.  
  72.  
  73. int32_t main()
  74. {
  75. int n;
  76. cin >> n;
  77. vector<cht> a(5);
  78. int tmp1, tmp2, tmp3;
  79. int ans;
  80. for(int i = 0; i < n; i++)
  81. {
  82. ans = 1e9;
  83. cin >> tmp1 >> tmp2 >> tmp3;
  84. a[i % 5].add(line(tmp2, tmp1));
  85. for(int j = 0; j < 5; j++) ans = min(ans, a[j].get(tmp3));
  86. cout << ans << '\n';
  87. }
  88. return 0;
  89. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement