Cod sursa(job #3167827)

Utilizator radu1331Mocan Radu radu1331 Data 11 noiembrie 2023 09:57:10
Problema Paduri de multimi disjuncte Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.14 kb
#include <iostream>
#pragma GCC optimize("Ofast")
#pragma GCC target("avx,avx2,fma")

const int NMAX = 1e6 + 5;

struct limits
{
    int left, right, val;
};

limits limit [ NMAX ];

int main ( int argc, char *argv[] )
{
    ( void )! freopen ( "disjoint.in" , "r", stdin );
    ( void )! freopen ( "disjoint.out" , "w", stdout );
    std::ios_base::sync_with_stdio ( false );
    std::cin.tie ( NULL );
    
    int n, m; std::cin >> n >> m;
    for ( int i = 1; i <= n; ++ i )
        limit [ i ].left = i, limit [ i ].right = i, limit [ i ].val = i;

    int cod, x, y;
    while ( m -- )
    {
        std::cin >> cod >> x >> y ;
        if ( cod == 1 )
        {
            if ( x > y ) std::swap( x, y );
            limit [ x ].right = limit [ y ].right, limit [ y ].left = limit [ x ].left;
        }
        else if ( cod == 2 )
        {
            if ( x > y ) std::swap( x, y );
            if ( limit [ x ].left <= limit [ y ].left && limit [ x ].right >= limit [ y ].right )
                std::cout << "DA";
            else std::cout << "NU";
            std::cout << '\n';
        }
    }
    return 0;
}