Advertisement
Guest User

Untitled

a guest
Jul 22nd, 2017
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.33 KB | None | 0 0
  1. #include <iostream>
  2. #include <bits/stdc++.h>
  3.  
  4. using namespace std;
  5.  
  6. int n, m;
  7. long long h[200000];
  8. long long t[800100];
  9.  
  10. void build (int v, int tl, int tr)
  11. {
  12. if (tl == tr)
  13. {
  14. t[v] = h[tl];
  15. }
  16. else
  17. {
  18. int tm = (tl + tr) / 2;
  19. build (2 * v, tl, tm);
  20. build (2 * v + 1, tm + 1, tr);
  21. t[v] = max (t[2 * v], t[2 * v + 1]);
  22. }
  23. }
  24.  
  25. long long Max (int v, int tl, int tr, int l, int r)
  26. {
  27. if (l <= tl && tr <= r)
  28. {
  29. return t[v];
  30. }
  31. if (l > tr || tl > r)
  32. {
  33. return INT_MIN;
  34. }
  35. int tm = (tl + tr) / 2;
  36. return max(Max(2 * v, tl, tm, l, r), Max(2 * v + 1, tm + 1, tr, l, r))
  37. }
  38.  
  39. int main()
  40. {
  41. // freopen ("mushrooms.in", "r", stdin);
  42. // freopen ("mushrooms.out", "w", stdout);
  43. cin >> n;
  44. for (int i = 0; i < n; i++)
  45. {
  46. int a ;
  47. scanf ("%d", &a);
  48. h[i] = a;
  49. }
  50. build (1, 0, n - 1);
  51. long long ans = 0;
  52. cin >> m;
  53. int l, r;
  54. int H = Max (1, 0 , n - 1, l, r);
  55. ans += H;
  56. for (int i = 0; i < m - 1; i++)
  57. {
  58. int ll = min(r, ((l * H + H * H) % n));
  59. int rr = max(r, ((l * H + H * H) % n));
  60. l = ll;
  61. r = rr;
  62. H = Max (1, 0, n - 1, l, r);
  63. ans += H;
  64. }
  65. cout << ans;
  66. return 0;
  67. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement