Submission #1320750

#TimeUsernameProblemLanguageResultExecution timeMemory
1320750_asunaaPictionary (COCI18_pictionary)C++20
140 / 140
177 ms7200 KiB
#include <bits/stdc++.h>
using namespace std;
long long i, j, l, r, mid, p, q, k, t, n, m, a, b, c, d, cnt, res, parent[100005], sz[100005], ans[100005];
const long long mod = 999993143, mod2 = 999993469;
string s;
bool check;
void make_set (long long v){
    parent[v] = v;
    sz[v] = 1;
}

long long find_set (long long v){
	if (v == parent[v]){
		return v;
	}
	return parent[v] = find_set(parent[v]);
}

void union_set (long long a, long long b){
    a = find_set(a);
    b = find_set(b);
    if (a != b){
        if (sz[a] < sz[b]){
        	swap(a, b);
		}
        parent[b] = a;
        sz[a] += sz[b];
    }
}

pair <long long, long long> ed[100005];

struct query{
	long long l, r, s1, s2, id;
};

query qq[100005];

bool cmp (query a, query b){
	long long mid1 = (a.l + a.r) / 2, mid2 = (b.l + b.r) / 2;
	return mid1 < mid2;
}

int main(){
	ios_base::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	cin >> n >> m >> q;
	for (i = 1; i <= q; i += 1){
		cin >> a >> b;
		qq[i] = {1, m, a, b, i};
	}
	t = 17;
	while (t--){
		sort(qq + 1, qq + q + 1, cmp);
		for (i = 1; i <= n; i += 1){
			make_set(i);
		}
		p = 0;
		res = m;
		for (i = 1; i <= q; i += 1){
			mid = (qq[i].l + qq[i].r) / 2;
			while (p <= mid){
				for (j = res; j <= n - res; j += res){
					union_set(j, j + res);
				}
				res -= 1;
				p += 1;
			}
			if (find_set(qq[i].s1) == find_set(qq[i].s2)){
				ans[qq[i].id] = mid;
				qq[i].r = mid - 1;
			}
			else{
				qq[i].l = mid + 1;
			}
		}
	}
	for (i = 1; i <= q; i += 1){
		cout << ans[i] + 1 << "\n";
	}
}
#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...