Submission #1174789

#TimeUsernameProblemLanguageResultExecution timeMemory
1174789vicvicPictionary (COCI18_pictionary)C++20
140 / 140
26 ms1736 KiB
#include <iostream>

using namespace std;
const int NMAX=1e5;
int n, m, q, union_day[NMAX+5], t[NMAX+5];
int tatal (int nod)
{
    return t[nod]<0?nod:tatal (t[nod]);
}
void join (int a, int b, int d)
{
    a=tatal (a);
    b=tatal (b);
    if (a==b)
        return;
    if (t[a]>t[b])
    {
        t[a]=b;
        union_day[a]=d;
    }
    else
    {
        if (t[a]==t[b])
            t[a]--;
        union_day[b]=d;
        t[b]=a;

    }
    union_day[a]=d;
}
int query (int x, int y)
{
    int ret=0;
    while (x!=y)
    {
        if (union_day[x]>union_day[y])
            ret=union_day[x], x=t[x];
        else
            ret=union_day[y], y=t[y];
    }
    return ret;
}
int main ()
{
    ios :: sync_with_stdio (0);
    cin.tie (nullptr);
    cin >> n >> m >> q;
    for (int i=1;i<=n;i++)
        t[i]=-1;
    for (int i=m;i>=1;i--)
    {
        for (int j=i+i;j<=n;j+=i)
        {
            join (i, j, i);
        }
    }
    while (q--)
    {
        int x, y;
        cin >> x >> y;
        cout << m+1-query (x, y) << "\n";
    }
    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...