Cod sursa(job #3167823)

Utilizator radu1331Mocan Radu radu1331 Data 11 noiembrie 2023 09:51:28
Problema Paduri de multimi disjuncte Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.17 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 )
                limit [ x ].right = limit [ y ].right;
            else
                limit [ x ].left = limit [ y ].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;
}