Cod sursa(job #2312619)

Utilizator mzsuzsiMagyari Zsuzsanna mzsuzsi Data 5 ianuarie 2019 10:38:32
Problema Arbori de intervale Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.48 kb
#include <iostream>
#include <fstream>
using namespace std;

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

void egy(long a[100000], long csucs, int bal, int jobb, long c, long d)
{
        if(bal==jobb)
        {
            a[csucs]=d;
        }
        else
        {
            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()
{
    freopen("arbint.in","r",stdin);
    freopen("arbint.out","w",stdout);
    int N,M,i=1;
    long a[100000]={0},x;
    cin>>N>>M;
    while(i<=N)
    {
        cin>>x;
        egy(a,1,1,N,i,x);
        i++;
    }
    i=1;
    int b;
    long long 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;
}