Submission #1167987

#TimeUsernameProblemLanguageResultExecution timeMemory
1167987Troll321Inside information (BOI21_servers)C++20
0 / 100
13 ms3656 KiB
#include <bits/stdc++.h>
#define fi first
#define se second
using namespace std;
typedef long long ll;
typedef pair<ll, ll> pll;
typedef pair<bool, bool> pbb;
const ll MAXN = 120000 + 5;
const ll MAXQ = 2*MAXN;

ll n, k;
pll range[MAXN];
// {L, R}
pbb extend[MAXN];
// {Lext, Rext}
pair<char, pll> query[MAXQ];
// {Type, {a, b}}

void addEdge(ll a, ll b) {
	if(a > b) {swap(a,b);}

	// Extend A
	range[a].se = b;
	extend[a].se = ((range[b].se - range[b].fi) == 0);

	// Extend B
	range[b].fi = a;
	extend[b].fi = ((range[a].se - range[a].fi) == 0);
}

ll findL(ll x) {
	if(extend[x].fi && range[x].fi != x) {
		range[x].fi = findL(range[x].fi);
		return range[x].fi;
	}
	return range[x].fi;
}

ll findR(ll x) {
	if(extend[x].se && range[x].se != x) {
		range[x].se = findR(range[x].se);
		return range[x].se;
	}
	return range[x].se;
}

pll find(ll x) {
	return {findL(x), findR(x)};
}

void data(ll a, ll b) {
	// Apakah B nyampe A
	pll out = find(b);
	cout << ((out.fi <= a && a <= out.se) ? "yes" : "no") << "\n";
}

void count(ll a) {
	pll out = find(a);
	cout << (out.se - out.fi + 1) << "\n";
}

void input() {
	cin >> n >> k;

	for (int i = 1; i <= n; ++i) {
		range[i] = {i,i};
		extend[i] = {true, true};
	}

	for (int i = 1; i <= n+k-1; ++i) {
		cin >> query[i].fi;
		switch(query[i].fi) {
		case 'S':
			cin >> query[i].se.fi >> query[i].se.se;
			addEdge(query[i].se.fi, query[i].se.se);
			break ;
		case 'Q':
			cin >> query[i].se.fi >> query[i].se.se;
			data(query[i].se.fi, query[i].se.se);
			break ;
		case 'C':
			cin >> query[i].se.fi;
			count(query[i].se.fi);
			break ;
		}
	}
}

int main() {
	ios_base::sync_with_stdio(false); cin.tie(0);
	input();
	return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...