Cod sursa(job #2758303)

Utilizator rARES_4Popa Rares rARES_4 Data 9 iunie 2021 18:53:10
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.57 kb
#include <fstream>
#include <iostream>
#include <climits>
using namespace std;
ifstream f ("aint.in");
ofstream g ("aint.out");
int n,m,c,x,y,min_rasp = INT_MAX;
int i;
int arbore[400001];
void update(int st,int dr,int nr,int poz_nr_in_vector,int poz)
{
    if(st == dr)
    {
        arbore[poz] = nr;
        return;
    }
    int mij= (st+dr)/2;
    if(poz_nr_in_vector<=mij)
    {
        update(st,mij,nr,poz_nr_in_vector,poz*2);
    }
    else
        update(mij+1,dr,nr,poz_nr_in_vector,poz*2+1);
    arbore[poz] = min(arbore[poz*2],arbore[poz*2+1]);

}
void gasire_min(int st_arb,int dr_arb,int st,int dr,int poz)
{
    if(st <= st_arb && dr_arb<=dr)
    {
        min_rasp = min(min_rasp,arbore[poz]);
    if(i == 8)
        cout << min_rasp<< " "<<st_arb<< " "<<dr_arb<< " "<<poz<< endl;
        return;
    }
    int mij = (st_arb + dr_arb) /2;
    if(st<=mij)
    {
        gasire_min(st_arb,mij,st,dr,poz*2);
    }
    if(mij<dr)
    {
        gasire_min(mij+1,dr_arb,st,dr,poz*2+1);
    }
}
int main()
{
    f >> n >> m;
    for(int i = 1;i<=100000;i++)
        arbore[i] = INT_MAX;
    for(int i = 1;i<=n;i++)
    {
        f >> x;
        update(1,n,x,i,1);
    }
    for(i =1;i<=m;i++)
    {
        f >> c >>x>>y;
        if(c == 1)
        {
            update(1,n,y,x,1);
        }
        else
        {
            min_rasp = INT_MAX;
            gasire_min(1,n,x,y,1);
            g << min_rasp<< '\n';
        }
        for(int j = 1;j<=n;j++)
            cout << arbore[j]<< " ";
        cout << endl;
    }
}