Untitled
unknown
c_cpp
2 years ago
2.3 kB
7
Indexable
#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;
}
Editor is loading...