Submission #498754

#TimeUsernameProblemLanguageResultExecution timeMemory
498754Lam_lai_cuoc_doiTeams (IOI15_teams)C++17
0 / 100
4073 ms335008 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; using ld = long double; using ull = unsigned long long; template <class T> void read(T &x) { x = 0; register int c; while ((c = getchar()) && (c > '9' || c < '0')) ; for (; c >= '0' && c <= '9'; c = getchar()) x = x * 10 + c - '0'; } constexpr bool typetest = 0; constexpr int N = 5e5 + 5; constexpr ll Inf = 1e17; struct node { int cnt; node *l, *r; node(node *l = nullptr, node *r = nullptr, int cnt = 0) : l(l), r(r), cnt(cnt) {} } tmp; node *f[N], *nil; pair<int, int> s[N]; int n, a[N]; ll dp[N]; void Update(node *st, int l, int r, const int &x, const int &v) { if (l == x && r == x) { st->cnt += v; return; } if ((l + r) / 2 >= x) { node *temp = new node; *temp = *st->l; st->l = temp; Update(st->l, l, (l + r) / 2, x, v); } else { node *temp = new node; *temp = *st->r; st->r = temp; Update(st->r, (l + r) / 2 + 1, r, x, v); } st->cnt = st->l->cnt + st->r->cnt; } void init(int m, int A[], int B[]) { nil = &tmp; nil->l = nil->r = nil; n = m; for (int i = 0; i < m; ++i) s[i] = make_pair(A[i], B[i]); sort(s, s + n); f[0] = new node(nil, nil, 0); for (int i = 1, j = 0; i <= n; ++i) { f[i] = new node; *f[i] = *f[i - 1]; cerr << i << "\n"; while (j < n && s[i].first <= i) { Update(f[i], 1, n, s[j].second, 1); ++j; } } } int Get(node *st, int l, int r, const int &a, const int &b) { if (l > b || r < a) return 0; if (l >= a && r <= b) return st->cnt; return Get(st->l, l, (l + r) / 2, a, b) + Get(st->r, (l + r) / 2 + 1, r, a, b); } int can(int m, int k[]) { for (int i = 1; i <= m; ++i) { a[i] = k[i - 1]; dp[i] = Inf; } sort(a + 1, a + m + 1); for (int i = 1; i <= m; ++i) { for (int j = i - 1; ~j; --j) dp[i] = min(dp[i], dp[j] + Get(f[a[i]], 1, n, a[i], n) - Get(f[a[j] + 1], 1, n, a[i], n)); if (dp[i] < 0) return 0; } return 1; } int q, m, k[N]; int u[N], v[N]; void Read() { cin >> n; for (int i = 0; i < n; ++i) cin >> u[i] >> v[i]; init(n, u, v); cerr << "ok\n"; cin >> q; while (q--) { cin >> m; for (int i = 0; i < m; ++i) cin >> k[i]; cout << can(m, k) << "\n"; } } void Solve() { }

Compilation message (stderr)

teams.cpp: In function 'void read(T&)':
teams.cpp:12:18: warning: ISO C++17 does not allow 'register' storage class specifier [-Wregister]
   12 |     register int c;
      |                  ^
teams.cpp: In constructor 'node::node(node*, node*, int)':
teams.cpp:26:52: warning: declaration of 'cnt' shadows a member of 'node' [-Wshadow]
   26 |     node(node *l = nullptr, node *r = nullptr, int cnt = 0) : l(l), r(r), cnt(cnt) {}
      |                                                ~~~~^~~~~~~
teams.cpp:24:9: note: shadowed declaration is here
   24 |     int cnt;
      |         ^~~
teams.cpp:26:35: warning: declaration of 'r' shadows a member of 'node' [-Wshadow]
   26 |     node(node *l = nullptr, node *r = nullptr, int cnt = 0) : l(l), r(r), cnt(cnt) {}
      |                             ~~~~~~^~~~~~~~~~~
teams.cpp:25:15: note: shadowed declaration is here
   25 |     node *l, *r;
      |               ^
teams.cpp:26:16: warning: declaration of 'l' shadows a member of 'node' [-Wshadow]
   26 |     node(node *l = nullptr, node *r = nullptr, int cnt = 0) : l(l), r(r), cnt(cnt) {}
      |          ~~~~~~^~~~~~~~~~~
teams.cpp:25:11: note: shadowed declaration is here
   25 |     node *l, *r;
      |           ^
teams.cpp:25:15: warning: 'node::r' will be initialized after [-Wreorder]
   25 |     node *l, *r;
      |               ^
teams.cpp:24:9: warning:   'int node::cnt' [-Wreorder]
   24 |     int cnt;
      |         ^~~
teams.cpp:26:5: warning:   when initialized here [-Wreorder]
   26 |     node(node *l = nullptr, node *r = nullptr, int cnt = 0) : l(l), r(r), cnt(cnt) {}
      |     ^~~~
teams.cpp: In constructor 'node::node(node*, node*, int)':
teams.cpp:26:52: warning: declaration of 'cnt' shadows a member of 'node' [-Wshadow]
   26 |     node(node *l = nullptr, node *r = nullptr, int cnt = 0) : l(l), r(r), cnt(cnt) {}
      |                                                ~~~~^~~~~~~
teams.cpp:24:9: note: shadowed declaration is here
   24 |     int cnt;
      |         ^~~
teams.cpp:26:35: warning: declaration of 'r' shadows a member of 'node' [-Wshadow]
   26 |     node(node *l = nullptr, node *r = nullptr, int cnt = 0) : l(l), r(r), cnt(cnt) {}
      |                             ~~~~~~^~~~~~~~~~~
teams.cpp:25:15: note: shadowed declaration is here
   25 |     node *l, *r;
      |               ^
teams.cpp:26:16: warning: declaration of 'l' shadows a member of 'node' [-Wshadow]
   26 |     node(node *l = nullptr, node *r = nullptr, int cnt = 0) : l(l), r(r), cnt(cnt) {}
      |          ~~~~~~^~~~~~~~~~~
teams.cpp:25:11: note: shadowed declaration is here
   25 |     node *l, *r;
      |           ^
teams.cpp: In constructor 'node::node(node*, node*, int)':
teams.cpp:26:52: warning: declaration of 'cnt' shadows a member of 'node' [-Wshadow]
   26 |     node(node *l = nullptr, node *r = nullptr, int cnt = 0) : l(l), r(r), cnt(cnt) {}
      |                                                ~~~~^~~~~~~
teams.cpp:24:9: note: shadowed declaration is here
   24 |     int cnt;
      |         ^~~
teams.cpp:26:35: warning: declaration of 'r' shadows a member of 'node' [-Wshadow]
   26 |     node(node *l = nullptr, node *r = nullptr, int cnt = 0) : l(l), r(r), cnt(cnt) {}
      |                             ~~~~~~^~~~~~~~~~~
teams.cpp:25:15: note: shadowed declaration is here
   25 |     node *l, *r;
      |               ^
teams.cpp:26:16: warning: declaration of 'l' shadows a member of 'node' [-Wshadow]
   26 |     node(node *l = nullptr, node *r = nullptr, int cnt = 0) : l(l), r(r), cnt(cnt) {}
      |          ~~~~~~^~~~~~~~~~~
teams.cpp:25:11: note: shadowed declaration is here
   25 |     node *l, *r;
      |           ^
teams.cpp: In function 'int Get(node*, int, int, const int&, const int&)':
teams.cpp:87:44: warning: declaration of 'a' shadows a global declaration [-Wshadow]
   87 | int Get(node *st, int l, int r, const int &a, const int &b)
      |                                 ~~~~~~~~~~~^
teams.cpp:32:8: note: shadowed declaration is here
   32 | int n, a[N];
      |        ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...