結果
問題 | 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;}// -- libvoid 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;}