Advertisement
Galebickosikasa

Untitled

May 19th, 2020
59
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.45 KB | None | 0 0
  1. #pragma GCC optimize("Ofast,no-stack-protector,unroll-loops,fast-math")
  2. #pragma GCC target("sse,sse2,sse3,ssse3,sse4,sse4.1,sse4.2,popcnt,abm,mmx,avx")
  3. // #pragma comment(linker, "/stack:200000000"]
  4.  
  5. #include <iostream>
  6. #include <vector>
  7. #include <cmath>
  8. #include <algorithm>
  9. #include <unordered_set>
  10. #include <unordered_map>
  11. #include <set>
  12. #include <map>
  13. #include <queue>
  14. #include <deque>
  15. #include <bitset>
  16. #include <stack>
  17. #include <random>
  18. #include <fstream>
  19. #include <sstream>
  20. #include <chrono>
  21.  
  22. #define fi first
  23. #define se second
  24. #define pb push_back
  25. #define ll long long
  26. #define ld long double
  27. #define hm unordered_map
  28. #define pii pair<int, int>
  29. #define sz(a) (int)a.size()
  30. #define all(a) a.begin(), a.end()
  31. #define cinv(v) for (auto& x: v) cin >> x
  32. #define fr(i, n) for (int i = 0; i < n; ++i)
  33. #define fl(i, l, n) for (int i = l; i < n; ++i)
  34.  
  35. #define int ll
  36.  
  37. using namespace std;
  38.  
  39.  
  40. #ifdef __LOCAL
  41. #define dbg(x) cerr << #x << " : " << x << '\n'
  42. const int maxn = 20;
  43. #else
  44. #define dbg(x)
  45. const int maxn = 2e5 + 20;
  46. #endif
  47.  
  48. //tg: @galebickosikasa
  49.  
  50. const ll inf = (ll) 4e18;
  51. const ld pi = asin (1) * 2;
  52. const ld eps = 1e-8;
  53. const ll mod = (ll)1e9 + 7;
  54. const ll ns = 97;
  55.  
  56. mt19937 rnd(chrono::steady_clock::now().time_since_epoch().count());
  57.  
  58. struct kek {
  59. int l, r, i;
  60. };
  61.  
  62. int check (vector<int>& goo, vector<int>& order, vector<kek>& q) {
  63. int n = sz (goo), m = sz (q);
  64. vector<int> t (n, m);
  65. auto moo = goo;
  66. fr (j, m) {
  67. auto x = q[order[j]];
  68. int l = x.l, r = x.r;
  69. dbg (l);
  70. dbg (r);
  71. int L = -1, R = -1;
  72. int res = 0, sum = 0, left = l - 1;
  73. fl (i, l, r + 1) {
  74. sum += moo[i];
  75. if (sum > res) {
  76. res = sum;
  77. L = left + 1;
  78. R = i;
  79. }
  80. if (sum < 0) {
  81. sum = 0;
  82. left = i;
  83. }
  84. }
  85. dbg (sum);
  86. dbg (L);
  87. dbg (R);
  88. if (L > -1) fl (i, L, R + 1) {
  89. t[i] = min (t[i], x.i);
  90. moo[i] = 0;
  91. }
  92. }
  93. int ans = 0;
  94. fr (i, n) {
  95. ans += goo[i] * t[i];
  96. dbg (t[i]);
  97. }
  98. dbg (ans);
  99. return ans;
  100. }
  101.  
  102.  
  103.  
  104.  
  105. signed main () {
  106. ios_base::sync_with_stdio(false);
  107. cin.tie(nullptr);
  108. cout.tie(nullptr);
  109. int n, m;
  110. cin >> n >> m;
  111. vector<int> goo (n);
  112. cinv (goo);
  113. vector<kek> q;
  114. fr (i, m) {
  115. int l, r;
  116. cin >> l >> r;
  117. --l, --r;
  118. q.pb ({l, r, i});
  119. }
  120. vector<int> a;
  121. fr (i, m) a.pb (i);
  122. int ans = check (goo, a, q);
  123. while (next_permutation (all (a))) {
  124. ans = min (ans, check (goo, a, q));
  125. }
  126. cout << ans;
  127.  
  128.  
  129.  
  130.  
  131. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement