結果
問題 | No.1059 素敵な集合 |
ユーザー |
![]() |
提出日時 | 2020-05-23 19:55:52 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
CE
(最新)
AC
(最初)
|
実行時間 | - |
コード長 | 1,779 bytes |
コンパイル時間 | 2,514 ms |
コンパイル使用メモリ | 177,444 KB |
最終ジャッジ日時 | 2025-03-11 00:28:11 |
合計ジャッジ時間 | 3,201 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge2 |
(要ログイン)
コンパイルエラー時のメッセージ・ソースコードは、提出者また管理者しか表示できないようにしております。(リジャッジ後のコンパイルエラーは公開されます)
ただし、clay言語の場合は開発者のデバッグのため、公開されます。
ただし、clay言語の場合は開発者のデバッグのため、公開されます。
コンパイルメッセージ
In file included from /usr/include/c++/13/string:43, from /usr/include/c++/13/bitset:52, from /usr/include/x86_64-linux-gnu/c++/13/bits/stdc++.h:52, from main.cpp:3: /usr/include/c++/13/bits/allocator.h: In destructor ‘std::_Vector_base<ufind::node, std::allocator<ufind::node> >::_Vector_impl::~_Vector_impl()’: /usr/include/c++/13/bits/allocator.h:184:7: error: inlining failed in call to ‘always_inline’ ‘std::allocator< <template-parameter-1-1> >::~allocator() noexcept [with _Tp = ufind::node]’: target specific option mismatch 184 | ~allocator() _GLIBCXX_NOTHROW { } | ^ In file included from /usr/include/c++/13/vector:66, from /usr/include/c++/13/queue:63, from /usr/include/x86_64-linux-gnu/c++/13/bits/stdc++.h:157: /usr/include/c++/13/bits/stl_vector.h:133:14: note: called from here 133 | struct _Vector_impl | ^~~~~~~~~~~~
ソースコード
#pragma GCC optimize("Ofast") #pragma GCC target("avx,avx2,fma") #include <bits/stdc++.h> #define rep(i, n) for (lli i = 0; i < (n); i++) #define rrep(i, n) for (lli i = (n)-1; i >= 0; i--) using namespace std; using lli = long long int; void YESNO(bool), YesNo(bool); template <class T1, class T2> bool chmin(T1 &l, const T2 &r); template <class T1, class T2> bool chmax(T1 &l, const T2 &r); struct ufind { struct node { int par, rank, size; void init(int i) { par = i; rank = 0; size = 1; } }; vector<node> nodes; ufind(int n) { nodes.resize(n); rep(i, n) nodes[i].init(i); } int find(int x) { return nodes[x].par == x ? x : (nodes[x].par = find(nodes[x].par)); } void unite(int x, int y) { x = find(x); y = find(y); if (x == y) return; if (nodes[x].rank < nodes[y].rank) { nodes[x].par = y; nodes[y].size += nodes[x].size; } else { nodes[y].par = x; if (nodes[x].rank == nodes[y].rank) nodes[x].rank++; nodes[x].size += nodes[y].size; } } bool same(int x, int y) { return find(x) == find(y); } int size(int x) { return nodes[find(x)].size; } }; int main() { int l, r; cin >> l >> r; ufind uf(r-l+1); for(int i = l;i<=r;i++){ for(int j = i;j<=r;j+=i){ uf.unite(i-l, j-l); } } set<int> s; rep(i, r-l+1){ s.insert(uf.find(i)); } cout << s.size()-1 <<endl; } // -- lib void YESNO(bool b) { cout << (b ? "YES" : "NO") << endl; } void YesNo(bool b) { cout << (b ? "Yes" : "No") << endl; } template <class T1, class T2> bool chmin(T1 &l, const T2 &r) { return (l > r) ? (l = r, true) : false; } template <class T1, class T2> bool chmax(T1 &l, const T2 &r) { return (l < r) ? (l = r, true) : false; }