Advertisement
Guest User

Untitled

a guest
Jul 21st, 2019
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.97 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. /*#pragma GCC optimize("Ofast,no-stack-protector")
  4. #pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,avx2,tune=native")
  5. #pragma GCC optimize("unroll-loops")
  6. #pragma GCC optimize("fast-math")
  7. #pragma GCC optimize("vpt")
  8. #pragma GCC optimize("rename-registers")
  9. #pragma GCC optimize("move-loop-invariants")
  10. #pragma GCC optimize("unswitch-loops")
  11. #pragma GCC optimize("function-sections")
  12. #pragma GCC optimize("data-sections")
  13. #pragma GCC optimize("branch-target-load-optimize")
  14. #pragma GCC optimize("branch-target-load-optimize2")
  15. #pragma GCC optimize("btr-bb-exclusive")*/
  16.  
  17. #define mp make_pair
  18. #define ll long long
  19. #define ld long double
  20. #define pb push_back
  21. #define fast_io ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
  22. #define fs first
  23. #define sc second
  24. #define getfiles ifstream cin("input.txt"); ofstream cout("output.txt");
  25. #define endl '\n'
  26. #define con continue
  27. #define pii pair<int, int>
  28.  
  29. const int INF = 2000000005;
  30. const ll BIG_INF = 2000000000000000005;
  31. const int mod = 1000000007;
  32. const int P = 31;
  33. const ld PI = 3.141592653589793238462643;
  34.  
  35. using namespace std;
  36.  
  37. struct edge {
  38. int u, v, p, w, rev;
  39. edge(){
  40. }
  41. edge(int U, int V, int P, int C) {
  42. u = U, v = V, p = P, w = C;
  43. }
  44. };
  45.  
  46. int n, q, o = 0, N, ans = 0;
  47. vector<pii> a;
  48.  
  49. vector<edge> e;
  50. vector< vector<int> > g;
  51. vector<int> p, d;
  52.  
  53. bool getShortPath() {
  54. fill(d.begin(), d.end(), INF);
  55. fill(p.begin(), p.end(), -1);
  56. d[0] = 0;
  57. set<pii> q;
  58. q.insert(mp(d[0], 0));
  59. while (!q.empty()) {
  60. int v = q.begin()->sc;
  61. q.erase(q.begin());
  62. for (int i = 0; i < g[v].size(); i++) {
  63. if (e[g[v][i]].p == 0)
  64. continue;
  65. if (d[e[g[v][i]].v] > d[v] + e[g[v][i]].w) {
  66. p[e[g[v][i]].v] = g[v][i];
  67. q.erase(mp(d[e[g[v][i]].v], e[g[v][i]].v));
  68. d[e[g[v][i]].v] = d[v] + e[g[v][i]].w;
  69. q.insert(mp(d[e[g[v][i]].v], e[g[v][i]].v));
  70. }
  71. }
  72. }
  73. if (d[N] == INF)
  74. return false;
  75. return true;
  76. }
  77.  
  78. signed main() {
  79. fast_io;
  80.  
  81. cin >> n >> q;
  82. N = 2 * n + 1;
  83. d.resize(N + 1);
  84. p.resize(N + 1);
  85.  
  86. a.resize(n, mp(-INF, INF));
  87. while(q--) {
  88. int t, l, r, v;
  89. cin >> t >> l >> r >> v;
  90. l--, r--;
  91. for (int i = l; i <= r; i++) {
  92. if (t == 1)
  93. a[i].fs = max(a[i].fs, v);
  94. else
  95. a[i].sc = min(a[i].sc, v);
  96.  
  97. if (a[i].fs > a[i].sc) {
  98. cout << -1;
  99. return 0;
  100. }
  101. }
  102. }
  103.  
  104. g.resize(2 * n + 2);
  105. for (int i = 1; i <= n; i++) {
  106. for (int k = 1; k <= n; k++) {
  107. e.pb(edge(0, i, 1, 2 * k - 1));
  108. g[0].pb(e.size() - 1);
  109. e.pb(edge(i, 0, 0, -(2 * k - 1)));
  110. g[i].pb(e.size() - 1);
  111. e[e.size() - 1].rev = e.size() - 2;
  112. e[e.size() - 2].rev = e.size() - 1;
  113. }
  114. }
  115. for (int i = 1; i <= n; i++) {
  116. for (int j = 1; j <= n; j++) {
  117. if (!(a[j - 1].fs <= i && a[j - 1].sc >= i))
  118. continue;
  119. e.pb(edge(i, n + j, 1, 0));
  120. g[i].pb(e.size() - 1);
  121. e.pb(edge(n + j, i, 0, 0));
  122. g[n + j].pb(e.size() - 1);
  123. e[e.size() - 1].rev = e.size() - 2;
  124. e[e.size() - 2].rev = e.size() - 1;
  125. }
  126. e.pb(edge(n + i, 2 * n + 1, 1, 0));
  127. g[n + i].pb(e.size() - 1);
  128. e.pb(edge(2 * n + 1, n + i, 0, 0));
  129. g[2 * n + 1].pb(e.size() - 1);
  130. e[e.size() - 1].rev = e.size() - 2;
  131. e[e.size() - 2].rev = e.size() - 1;
  132. }
  133.  
  134. while(getShortPath()) {
  135. int cur = N;
  136. while (cur != 0) {
  137. e[p[cur]].p = 0;
  138. e[e[p[cur]].rev].p = 1;
  139. ans += e[p[cur]].w;
  140. cur = e[p[cur]].u;
  141. }
  142. }
  143. cout << ans;
  144.  
  145. return 0;
  146. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement