Cod sursa(job #3321022)

Utilizator Roberto_CChirvasitu Roberto Roberto_C Data 7 noiembrie 2025 22:30:47
Problema Algoritmul lui Euclid Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.08 kb
#include <bits/stdc++.h>
using namespace std;

ifstream fin("euclid2.in");
ofstream fout("euclid2.out");

int n,v[2],aint[4],ans,t;

void build(int nod, int st, int dr)
{
    if(st == dr)
    {
        aint[nod] = v[st];
        return;
    }
    else
    {
        int mij = (st + dr) / 2;
        build(nod+1,st,mij);
        build(nod+2*(mij-st+1),mij+1,dr);
        aint[nod] = __gcd(aint[nod+1],aint[nod+2*(mij-st+1)]);
    }
}

void query(int nod, int st, int dr, int qst, int qdr)
{
    if(qst <= st && dr <= qdr)
    {
        ans = __gcd(ans,aint[nod]);
        return;
    }
    else
    {
        int mij = (st + dr) / 2;
        if(qst <= mij)
            query(nod+1,st,mij,qst,qdr);
        if(qdr > mij)
            query(nod+2*(mij-st+1),mij+1,dr,qst,qdr);
    }
}

int main()
{
    fin >> t;
    while(t--)
    {
        for(int i = 1; i <= 2; i++)
            fin >> v[i];
        ans = v[1];
        build(1,1,2);
        for(int i = 1; i <= 1; i++)
            query(1,1,2,1,2);
        fout << ans << '\n';
    }
    return 0;
}