Cod sursa(job #2443011)

Utilizator filiptudose2007Tudose Filip filiptudose2007 Data 26 iulie 2019 10:49:56
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.92 kb
#include <bits/stdc++.h>
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int n,m,x,y,tip,i,Ai[400005];
void Update(int poz, int val, int nod, int a, int b)
{
    if(a==b)
    {
        Ai[nod]=val;
        return ;
    }
    int mij=(a+b)/2;
    if(poz<=mij)Update(poz,val,nod*2,a,mij);
    else Update(poz,val,nod*2+1,mij+1,b);
    Ai[nod]=max(Ai[nod*2],Ai[nod*2+1]);
}
int query(int nod, int a, int b, int qa, int qb)
{
    if(qa<=a && qb>=b)return Ai[nod];
    int rez1=-1,rez2=-1,mij=(a+b)/2;
    if(qa<=mij)rez1=query(nod*2,a,mij,qa,qb);
    if(qb>mij)rez2=query(nod*2+1,mij+1,b,qa,qb);
    return max(rez1,rez2);
}
int main()
{
    f>>n>>m;
    for(i=1;i<=n;++i)
    {
        f>>x;
        Update(i,x,1,1,n);
    }
    for(i=1;i<=m;++i)
    {
        f>>tip>>x>>y;
        if(tip==0)g<<query(1,1,n,x,y)<<'\n';
        if(tip==1)Update(x,y,1,1,n);
    }
    return 0;
}