답안 #207685

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
207685 2020-03-08T14:56:16 Z bibabas Pictionary (COCI18_pictionary) C++17
0 / 140
1500 ms 8280 KB
#define _GLIBCXX_DEBUG
#include <bits/stdc++.h>
 
#define ll long long
#define ull unsigned ll
#define vi vector<ll>
#define vvi vector<vi>
#define all(x) x.begin(), x.end()
#define pb push_back
#define mp make_pair
#define ld long double
#define pii pair<ll, ll>
#define mt make_tuple
#define mn(a, b) a = min(a, b)
#define mx(a, b) a = max(a, b)
 
using namespace std;
 
const ll INF = (ll)2e9;
const ll inf = (ll)2e18;
const ld eps = (ld)1e-10;
const ll mod = (ll)1e9 + 7;
const ll MAXN = (ll)1e5 + 1;
const ll MAXC = (ll)2001;
const ll MAXE = (ll)1000;
const ll MAXLOG = 21;
const ll maxlen = (ll)1e5;
const ll asci = (ll)256;
const ll block = 50000;
const ld PI = acos(-1);
//
/*#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace __gnu_pbds;
typedef tree<
ll,
null_type,
less<ll>,
rb_tree_tag,
tree_order_statistics_node_update>
ordered_set;*/
 
template <class T>
istream& operator >>(istream &in, vector<T> &arr){
     for (T &cnt : arr) {
        in >> cnt;
    }
    return in;
};

struct dsu{
    int p[MAXN], sz[MAXN];

    void clear(int n) {
        for (int i = 0; i <= n; ++i) {
            p[i] = i; sz[i] = 1;
        }
    }

    int par(int v) {
        if (p[v] == v) return v;
        return p[v] = par(p[v]);
    }

    void unite(int v, int u) {
        v = par(v), u = par(u);
        if (v == u) return;
        if (sz[v] < sz[u]) swap(v, u);
        sz[v] += sz[u];
        p[u] = v;
    }

    bool in(int v, int u) {
        v = par(v), u = par(u);
        if (v == u) return true;
        return false;
    }
};

dsu snm;

void solve() {
    int n, m, q; cin >> n >> m >> q;
    vi L(q, -1), R(q, m - 1), ok(q);
    vector<pii> mid(q), check(q);
    for (int i = 0; i < q; ++i) {
        int v, u; cin >> v >> u;
        check[i] = mp(v, u);
    }
    for (int i = 0; i < q; ++i) {
        if (L[i] + 1 == R[i]) mid[i] = mp(-1, -1);
        mid[i] = mp((L[i] + R[i]) / 2, i);
    }
    while (mid != vector<pii>(q, mp(-1, -1))) {
        sort(all(mid)); snm.clear(n);
        int it = 0;
        for (int i = m; i >= 1; --i) {
            for (int j = i; j + i <= n; j += i) {
                snm.unite(j, j + i);
            }
            while (it < q && m - i >= mid[it].first) {
                if (mid[it].first != -1) ok[mid[it].second] = snm.in(check[mid[it].second].first, check[mid[it].second].second);
                it++;
            }
        }
        for (int i = 0; i < q; ++i) {
            if (ok[i]) R[i] = (L[i] + R[i]) / 2;
            else L[i] = (L[i] + R[i]) / 2;
        }
        for (int i = 0; i < q; ++i) {
            if (L[i] + 1 == R[i]) mid[i] = mp(-1, -1);
            else mid[i] = mp((L[i] + R[i]) / 2, i);
        }
    }
    for (int i = 0; i < q; ++i) {
        cout << R[i] + 1 << "\n";
    }
}
 
int main() {
#ifdef LOCAL
    freopen("input.txt", "r", stdin);
    freopen("output.txt", "w", stdout);
#else
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);
#endif
    cout.precision(30);
    solve();
 
    return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 1586 ms 692 KB Time limit exceeded
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 1589 ms 1748 KB Time limit exceeded
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 1589 ms 5328 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 1591 ms 7416 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 1589 ms 3648 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 1591 ms 3972 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 1580 ms 5480 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 1589 ms 6960 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 1599 ms 7304 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 1580 ms 8280 KB Time limit exceeded
2 Halted 0 ms 0 KB -