제출 #373434

#제출 시각아이디문제언어결과실행 시간메모리
373434WLZ마상시합 토너먼트 (IOI12_tournament)C++14
100 / 100
148 ms18156 KiB
#include <bits/stdc++.h> using namespace std; class fenwick_tree { private: int n; vector<int> fenw; public: fenwick_tree(int _n) : n(_n) { fenw.assign(n, 0); } void update(int x, int val) { while (x < n) { fenw[x] += val; x += x & -x; } } int query(int x) { int ans = 0; while (x > 0) { ans += fenw[x]; x -= x & -x; } return ans; } int find(int x) { int pos = 0, save = x; for (int i = 20; i >= 0; i--) { if (pos + (1 << i) >= n) continue; if (fenw[pos + (1 << i)] < x) { pos += (1 << i); x -= fenw[pos]; } } return pos + (save > 0); } }; class segment_tree { private: struct node { int l, r, val; node *left, *right; } *root; node *build(int l, int r, int *a) { if (l == r) return new node{l, r, a[l], nullptr, nullptr}; node *left = build(l, (l + r) / 2, a); node *right = build((l + r) / 2 + 1, r, a); return new node{l, r, max(left->val, right->val), left, right}; } int query(int l, int r, node *cur) { if (cur->l > r || cur->r < l) return -1; if (cur->l >= l && cur->r <= r) return cur->val; return max(query(l, r, cur->left), query(l, r, cur->right)); } public: segment_tree(int *a, int n) { root = build(1, n, a); } int query(int l, int r) { return query(l, r, root); } }; int GetBestPosition(int N, int C, int R, int *K, int *S, int *E) { set<int> st; fenwick_tree fenw(N + 1); for (int i = 1; i <= N; i++) { st.insert(i); fenw.update(i, +1); } segment_tree seg(K - 1, N - 1); vector<int> pre(N + 2, 0); for (int i = 0; i < C; i++) { S[i]++; E[i]++; int l = fenw.find(S[i] - 1) + 1, r = fenw.find(E[i]); auto it = st.lower_bound(l); while (next(it) != st.end() && *next(it) <= r) { fenw.update(*it, -1); it = st.erase(it); } if (seg.query(l, r - 1) <= R) { pre[l]++; pre[r + 1]--; } } int ans = 0; for (int i = 1; i <= N; i++) { pre[i] += pre[i - 1]; if (pre[i] > pre[ans]) ans = i; } return max(ans - 1, 0); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...