Cod sursa(job #2998585)

Utilizator Darius1414Dobre Darius Adrian Darius1414 Data 9 martie 2023 19:00:08
Problema Arbori de intervale Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.83 kb
#include <iostream>
#include <fstream>
using namespace std;
int n,m,x,v[256], p = 1;
void update(int poz,int x)
{
    poz=poz+p-1;
    v[poz]=x;
    while (poz!=1)
    {
        poz/=2;
        v[poz]=max(v[poz*2],v[poz*2+1]);
    }
}
int maxim(int a,int b,int st,int dr,int index)
{
    if (a<=st && b>=dr) return v[index];
    if (dr<a || st>b) return 0;
    return max(maxim(a,b,st,(st+dr)/2,index*2),maxim(a,b,(st+dr)/2+1,dr,index*2+1));
}
int main()
{
    ifstream f ("arbint.in");
    ofstream g ("arbint.out");
    f>>n>>m;

    int a,b,c;
    while (p<n) p*=2;
    for (int i=1; i<=n; i++)
    {
        f>>x;
        update(i,x);
    }
    n=p;
    for (int i=1;i<=m;i++)
    {
        f>>c>>a>>b;
        if (c==0)
            g<<maxim(a,b,1,n,1)<<'\n';
        else
            update(a,b);
    }
}