Untitled
c_cpp
a month ago
2.3 kB
1
Indexable
Never
#include <iostream> #include <cstdio> #include <cstdlib> #include <algorithm> #include <cmath> #include <vector> #include <set> #include <map> #include <unordered_set> #include <unordered_map> #include <queue> #include <deque> #include <ctime> #include <cassert> #include <complex> #include <string> #include <cstring> #include <chrono> #include <random> #include <bitset> #include <array> #include <iomanip> using namespace std; using ll = long long; using ull = unsigned long long; using db = long double; using pii = pair<int, int>; using pll = pair<ll, ll>; using pdd = pair<db, db>; using tiii = tuple<int, int, int>; using str = string; #define vt vector #define pb push_back #define eb emplace_back #define ins insert #define all(x) x.begin(), x.end() #define rall(x) x.rbegin(), x.rend() #define sz(x) (int)x.size() #define mp make_pair #define mt make_tuple #define fi first #define se second const int maxn = 300001; struct dsu { struct mno { int s, min, max; }; vector<mno> a(maxn); void init(){ for (int i = 0; i < maxn; ++i) { a[i].s = 1; a[i].min = i; a[i].max = i; } } void unite(int u, int v) { int ss, mmin, mmax; ss = a[u].s + a[v].s; a[u].s = ss; a[v].s = ss; mmin = min(a[u].min, a[u].min); a[u].min = mmin; a[v].min = mmin; mmax = max(a[u].max, a[v].max); a[u].max = mmax; a[v].max = mmax; } vt<int> get(int v) { return {a[v].s, a[v].min, a[v],max}; } }; void solve() { int n, m; cin >> n >> m; dsu d; d.init(); while(m--) { str c; cin >> c; if (c == "unite") { int a, b; cin >> a >> b; d.unite(a, b); } else { int v; cin >> v; vt<int> ans = d.get(v); cout << ans[1] << ' ' << ans[2] << ' ' << ans[0] << '\n'; } } } signed main() { ios::sync_with_stdio(false); cin.tie(NULL); // freopen("data.in", "r", stdin); // freopen("data.out", "w", stdout); int tests = 1; // cin >> tests; while (tests--) { solve(); } return 0; }