Submission #27977146
Source Code Expand
#include <algorithm> #include <iostream> #include <vector> using namespace std; struct UnionFind { std::vector<int> parent_or_size; int cnt; UnionFind(int n) : parent_or_size(n, -1), cnt(n) {} void unite(int x, int y) { x = find_root(x); y = find_root(y); if (x == y) { return; } if (-parent_or_size[x] < -parent_or_size[y]) { std::swap(x, y); } parent_or_size[x] += parent_or_size[y]; parent_or_size[y] = x; cnt--; } bool is_same_root(int x, int y) { return find_root(x) == find_root(y); } int find_root(int x) { if (parent_or_size[x] < 0) { return x; } return parent_or_size[x] = find_root(parent_or_size[x]); } int size(int x) { return -parent_or_size[find_root(x)]; } }; int main() { int L, Q; std::cin >> L >> Q; std::vector<int> c(Q), x(Q); std::vector<int> cuts; cuts.push_back(0); for (int i = 0; i < Q; i++) { std::cin >> c[i] >> x[i]; if (c[i] == 1) { cuts.push_back(x[i]); } } cuts.push_back(L); int siz = cuts.size(); UnionFind uf_tree(siz - 1); sort(cuts.begin(), cuts.end()); for (int i = 0; i < siz - 1; i++) { uf_tree.parent_or_size[i] = -(cuts[i + 1] - cuts[i]); } vector<int> ans; for (int i = Q - 1; i >= 0; i--) { int idx = std::lower_bound(cuts.begin(), cuts.end(), x[i]) - cuts.begin(); if (c[i] == 1) { uf_tree.unite(idx, idx - 1); } if (c[i] == 2) { ans.push_back(uf_tree.size(idx - 1)); } } reverse(ans.begin(), ans.end()); for (int a : ans) { cout << a << "\n"; } return 0; }
Submission Info
Submission Time | |
---|---|
Task | D - Cutting Woods |
User | kira924age |
Language | C++ (GCC 9.2.1) |
Score | 400 |
Code Size | 1673 Byte |
Status | AC |
Exec Time | 127 ms |
Memory | 6388 KiB |
Judge Result
Set Name | Sample | All | ||||
---|---|---|---|---|---|---|
Score / Max Score | 0 / 0 | 400 / 400 | ||||
Status |
|
|
Set Name | Test Cases |
---|---|
Sample | 00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt |
All | 00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt, 01_max_random_00.txt, 01_max_random_01.txt, 01_max_random_02.txt, 01_max_random_03.txt, 01_max_random_04.txt, 02_all_1_00.txt, 03_all_2_00.txt, 04_hack_00.txt, 04_hack_01.txt, 04_hack_02.txt, 04_hack_03.txt, 04_hack_04.txt |
Case Name | Status | Exec Time | Memory |
---|---|---|---|
00_sample_00.txt | AC | 8 ms | 3460 KiB |
00_sample_01.txt | AC | 4 ms | 3596 KiB |
00_sample_02.txt | AC | 3 ms | 3592 KiB |
01_max_random_00.txt | AC | 125 ms | 6384 KiB |
01_max_random_01.txt | AC | 127 ms | 6388 KiB |
01_max_random_02.txt | AC | 122 ms | 6324 KiB |
01_max_random_03.txt | AC | 125 ms | 6164 KiB |
01_max_random_04.txt | AC | 123 ms | 6384 KiB |
02_all_1_00.txt | AC | 127 ms | 6316 KiB |
03_all_2_00.txt | AC | 103 ms | 5696 KiB |
04_hack_00.txt | AC | 99 ms | 6288 KiB |
04_hack_01.txt | AC | 114 ms | 6208 KiB |
04_hack_02.txt | AC | 117 ms | 6224 KiB |
04_hack_03.txt | AC | 114 ms | 6296 KiB |
04_hack_04.txt | AC | 116 ms | 6296 KiB |