Advertisement
Guest User

Untitled

a guest
Jan 18th, 2020
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.32 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. typedef long long ll;
  6.  
  7. int main() {
  8.  
  9. ios_base::sync_with_stdio(0);
  10. cin.tie(0); cout.tie(0);
  11.  
  12. //freopen("input.txt", "r", stdin);
  13.  
  14. ll n;
  15. cin >> n;
  16. vector<ll> a(n);
  17. for (int i = 0; i < n; i++) cin >> a[i];
  18.  
  19. vector<vector<ll> > dp(n, vector<ll>(4));
  20. dp[0][0] = 0;
  21. dp[0][1] = 0;
  22. dp[0][2] = 0;
  23. dp[0][3] = 0;
  24.  
  25. for (int i = 1; i < n; i++) {
  26.  
  27. for (int j = 0; j < 4; j++) {
  28. dp[i][0] = max(dp[i][0], dp[i - 1][j]);
  29. }
  30.  
  31. dp[i][1] = dp[i - 1][0] + a[i];
  32. dp[i][2] = dp[i - 1][1] + a[i];
  33. dp[i][3] = dp[i - 1][2] + a[i];
  34.  
  35. }
  36.  
  37. ll ans = dp[n - 1][0];
  38. for (int j = 1; j <= 3; j++) {
  39. ans = max(ans, dp[n - 1][j]);
  40. }
  41.  
  42.  
  43. dp.assign(n, vector<ll>(4));
  44. dp[0][0] = 0;
  45. dp[0][1] = a[0];
  46. dp[0][2] = 0;
  47. dp[0][3] = 0;
  48.  
  49. for (int i = 1; i < n; i++) {
  50.  
  51. for (int j = 0; j < 4; j++) {
  52. dp[i][0] = max(dp[i][0], dp[i - 1][j]);
  53. }
  54.  
  55. dp[i][1] = dp[i - 1][0] + a[i];
  56. dp[i][2] = dp[i - 1][1] + a[i];
  57. dp[i][3] = dp[i - 1][2] + a[i];
  58.  
  59. }
  60.  
  61. ans = max(ans, dp[n - 1][0]);
  62.  
  63.  
  64.  
  65. dp.assign(n, vector<ll>(4));
  66. dp[0][0] = 0;
  67. dp[0][1] = 0;
  68. dp[0][2] = a[0];
  69. dp[0][3] = 0;
  70.  
  71. for (int i = 1; i < n; i++) {
  72.  
  73. for (int j = 0; j < 4; j++) {
  74. dp[i][0] = max(dp[i][0], dp[i - 1][j]);
  75. }
  76.  
  77. dp[i][1] = dp[i - 1][0] + a[i];
  78. dp[i][2] = dp[i - 1][1] + a[i];
  79. dp[i][3] = dp[i - 1][2] + a[i];
  80.  
  81. }
  82.  
  83. ans = max(ans, dp[n - 1][0]);
  84. for (int j = 1; j <= 1; j++) {
  85. ans = max(ans, dp[n - 1][j]);
  86. }
  87.  
  88.  
  89. dp.assign(n, vector<ll>(4));
  90. dp[0][0] = 0;
  91. dp[0][1] = 0;
  92. dp[0][2] = 0;
  93. dp[0][3] = a[0];
  94.  
  95. for (int i = 1; i < n; i++) {
  96.  
  97. for (int j = 0; j < 4; j++) {
  98. dp[i][0] = max(dp[i][0], dp[i - 1][j]);
  99. }
  100.  
  101. dp[i][1] = dp[i - 1][0] + a[i];
  102. dp[i][2] = dp[i - 1][1] + a[i];
  103. dp[i][3] = dp[i - 1][2] + a[i];
  104.  
  105. }
  106.  
  107. ans = max(ans, dp[n - 1][0]);
  108. for (int j = 1; j <= 2; j++) {
  109. ans = max(ans, dp[n - 1][j]);
  110. }
  111.  
  112.  
  113. cout << ans << "\n";
  114. ll q;
  115. cin >> q;
  116.  
  117. while (q--) {
  118.  
  119. ll b, c;
  120. cin >> b >> c;
  121. a[b - 1] = c;
  122. dp.assign(n, vector<ll>(4));
  123. dp[0][0] = 0;
  124. dp[0][1] = 0;
  125. dp[0][2] = 0;
  126. dp[0][3] = 0;
  127.  
  128. for (int i = 1; i < n; i++) {
  129.  
  130. for (int j = 0; j < 4; j++) {
  131. dp[i][0] = max(dp[i][0], dp[i - 1][j]);
  132. }
  133.  
  134. dp[i][1] = dp[i - 1][0] + a[i];
  135. dp[i][2] = dp[i - 1][1] + a[i];
  136. dp[i][3] = dp[i - 1][2] + a[i];
  137.  
  138. }
  139.  
  140. ll ans = dp[n - 1][0];
  141. for (int j = 1; j <= 3; j++) {
  142. ans = max(ans, dp[n - 1][j]);
  143. }
  144.  
  145.  
  146. dp.assign(n, vector<ll>(4));
  147. dp[0][0] = 0;
  148. dp[0][1] = a[0];
  149. dp[0][2] = 0;
  150. dp[0][3] = 0;
  151.  
  152. for (int i = 1; i < n; i++) {
  153.  
  154. for (int j = 0; j < 4; j++) {
  155. dp[i][0] = max(dp[i][0], dp[i - 1][j]);
  156. }
  157.  
  158. dp[i][1] = dp[i - 1][0] + a[i];
  159. dp[i][2] = dp[i - 1][1] + a[i];
  160. dp[i][3] = dp[i - 1][2] + a[i];
  161.  
  162. }
  163.  
  164. ans = max(ans, dp[n - 1][0]);
  165.  
  166.  
  167.  
  168. dp.assign(n, vector<ll>(4));
  169. dp[0][0] = 0;
  170. dp[0][1] = 0;
  171. dp[0][2] = a[0];
  172. dp[0][3] = 0;
  173.  
  174. for (int i = 1; i < n; i++) {
  175.  
  176. for (int j = 0; j < 4; j++) {
  177. dp[i][0] = max(dp[i][0], dp[i - 1][j]);
  178. }
  179.  
  180. dp[i][1] = dp[i - 1][0] + a[i];
  181. dp[i][2] = dp[i - 1][1] + a[i];
  182. dp[i][3] = dp[i - 1][2] + a[i];
  183.  
  184. }
  185.  
  186. ans = max(ans, dp[n - 1][0]);
  187. for (int j = 1; j <= 1; j++) {
  188. ans = max(ans, dp[n - 1][j]);
  189. }
  190.  
  191.  
  192. dp.assign(n, vector<ll>(4));
  193. dp[0][0] = 0;
  194. dp[0][1] = 0;
  195. dp[0][2] = 0;
  196. dp[0][3] = a[0];
  197.  
  198. for (int i = 1; i < n; i++) {
  199.  
  200. for (int j = 0; j < 4; j++) {
  201. dp[i][0] = max(dp[i][0], dp[i - 1][j]);
  202. }
  203.  
  204. dp[i][1] = dp[i - 1][0] + a[i];
  205. dp[i][2] = dp[i - 1][1] + a[i];
  206. dp[i][3] = dp[i - 1][2] + a[i];
  207.  
  208. }
  209.  
  210. ans = max(ans, dp[n - 1][0]);
  211. for (int j = 1; j <= 2; j++) {
  212. ans = max(ans, dp[n - 1][j]);
  213. }
  214.  
  215.  
  216. cout << ans << "\n";
  217.  
  218. }
  219.  
  220. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement