제출 #1052664

#제출 시각아이디문제언어결과실행 시간메모리
1052664thomas_li팀들 (IOI15_teams)C++17
컴파일 에러
0 ms0 KiB
#include <bits/stdc++.h> using namespace std; namespace std { template <class Fun> class y_combinator_result { Fun fun_; public: template <class T> explicit y_combinator_result(T &&fun) : fun_(std::forward<T>(fun)) {} template <class... Args> decltype(auto) operator()(Args &&...args) { return fun_(std::ref(*this), std::forward<Args>(args)...); } }; template <class Fun> decltype(auto) yc(Fun &&fun) { return y_combinator_result<std::decay_t<Fun>>(std::forward<Fun>(fun)); } } // namespace std typedef long long ll; // #define int ll #define rep(i, a, b) for (int i = a; i < (b); ++i) #define all(x) begin(x), end(x) #define sz(x) (int)(x).size() #define PB push_back #define FS first #define SD second #define ary(k) array<int, k> template <class A, class B> void cmx(A &x, B y) { x = max<A>(x, y); } template <class A, class B> void cmn(A &x, B y) { x = min<A>(x, y); } typedef pair<int, int> pii; typedef vector<int> vi; signed main() { cin.tie(0)->sync_with_stdio(0); cin.exceptions(cin.failbit); struct Node { int l, r, sum; }; vector<Node> seg; auto build = yc([&](auto &&self, int l, int r) -> int { int u = sz(seg); seg.emplace_back(); seg[u].sum = 0; if (l != r) { int mid = (l + r) / 2; seg[u].l = self(l, mid); seg[u].r = self(mid + 1, r); } return u; }); auto inc = yc([&](auto &&self, int u, int l, int r, int x) -> int { int nu = sz(seg); seg.PB(seg[u]); if (l == r) { seg[nu].sum++; return nu; } int mid = (l + r) / 2; if (x <= mid) seg[nu].l = self(seg[nu].l, l, mid, x); else if (x > mid) seg[nu].r = self(seg[nu].r, mid + 1, r, x); seg[nu].sum = seg[seg[nu].l].sum + seg[seg[nu].r].sum; return nu; }); auto sum = yc([&](auto &&self, int u, int l, int r, int ql, int qr) -> int { if (l == ql && r == qr) return seg[u].sum; int mid = (l + r) / 2; if (qr <= mid) return self(seg[u].l, l, mid, ql, qr); else if (ql > mid) return self(seg[u].r, mid + 1, r, ql, qr); else return self(seg[u].l, l, mid, ql, mid) + self(seg[u].r, mid + 1, r, mid + 1, qr); }); int n; cin >> n; vector<vi> ls(n + 1); vector<pii> in; rep(i, 0, n) { int l, r; cin >> l >> r; ls[r].PB(l); } int root = build(1, n); vi ver(n + 1); for (int i = n; i >= 1; i--) { for (int l : ls[i]) { root = inc(root, 1, n, l); } ver[i] = root; } int q; cin >> q; while (q--) { int m; cin >> m; vi vals; rep(i, 0, m) { int x; cin >> x; vals.PB(x); } if (accumulate(all(vals), 0ll) > n) { cout << "0\n"; continue; } sort(all(vals)); vi dp = {0}, unq = {0}; rep(i, 0, sz(vals)) { int j = i; while (j + 1 < sz(vals) && vals[j + 1] == vals[j]) j++; int num = j - i + 1; int tot = num * vals[i]; int cur = 1e9; rep(k, 0, sz(dp)) { int add = sum(ver[vals[i]], 1, n, unq[k] + 1, vals[i]) - tot; /* for (auto [l, r] : in) // l in [unq[k]+1,vals[i]],r in [vals[i],n] if (l > unq[k] && r >= vals[i] && vals[i] >= l) { add++; }*/ cmn(cur, dp[k] + add); } dp.PB(cur); // cerr << vals[i] << " " << cur << " " << tot << "\n"; unq.PB(vals[i]); i = j; } cout << (*min_element(all(dp)) >= 0) << "\n"; } } // delta = sumpeople - sumsizes

컴파일 시 표준 에러 (stderr) 메시지

/usr/bin/ld: /tmp/ccN8el37.o: in function `main':
grader.c:(.text.startup+0x0): multiple definition of `main'; /tmp/ccbR5Cd7.o:teams.cpp:(.text.startup+0x0): first defined here
/usr/bin/ld: /tmp/ccN8el37.o: in function `main':
grader.c:(.text.startup+0x88): undefined reference to `init(int, int*, int*)'
/usr/bin/ld: grader.c:(.text.startup+0x242): undefined reference to `can(int, int*)'
collect2: error: ld returned 1 exit status