Cod sursa(job #2312628)

Utilizator mzsuzsiMagyari Zsuzsanna mzsuzsi Data 5 ianuarie 2019 11:30:05
Problema Arbori de intervale Scor 50
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.51 kb
#include <iostream>
#include <fstream>
using namespace std;

int nulla(int a[100000],int csucs, int c, int d, int bal, int jobb)
{
     if (bal>d || jobb<c)
        return 0;
    else if (bal>=c && jobb<=d)
        return a[csucs];
    else
    {
        int kozep=(bal+jobb)/2;
        int max1=-1,max2=-1;
        if(c<=kozep)
            max1=nulla(a,csucs*2,c,d,bal,kozep);
        if(d>kozep)
            max2=nulla(a,csucs*2+1,c,d,kozep+1,jobb);
        if(max1>max2)
            return max1;
        else return max2;
    }
}

void egy(int a[100000], int csucs, int bal, int jobb, int c, int d)
{
        if(bal==jobb)
        {
            a[csucs]=d;
            return;
        }
            int kozep=(bal+jobb)/2;
            if(c<=kozep)
                egy(a,csucs*2,bal,kozep,c,d);
            else egy(a,csucs*2+1,kozep+1,jobb,c,d);
            if(a[csucs*2+1]>a[csucs*2])
                a[csucs]=a[csucs*2+1];
            else a[csucs]=a[csucs*2];


}

int main()
{
    (void) freopen("arbint.in","r",stdin);
    (void) freopen("arbint.out","w",stdout);
    int N,M,i=1;
    int a[400100]={0},x;
    cin>>N>>M;
    while(i<=N)
    {
        cin>>x;
        egy(a,1,1,N,i,x);
        i++;
    }
    i=1;
    int b;
    int c,d;          //b- 1 vagy 0
    while(i<=M)
    {
        cin>>b>>c>>d;
        if(b==0)
        {cout<<nulla(a,1,c,d,1,N)<<'\n';}
        else egy(a,1,1,N,c,d);
        i++;

    }
    fclose(stdin);
    fclose(stdout);
    return 0;
}