Mai intai trebuie sa te autentifici.

Cod sursa(job #1652878)

Utilizator superstar1998Moldoveanu Vlad superstar1998 Data 15 martie 2016 15:59:39
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.89 kb
#include <iostream>
#include <fstream>
using namespace std;
int n,m,a,b,c,arb[400066],maxx;
ifstream f("arbint.in");
ofstream g("arbint.out");
void upd(int nod, int pos, int x, int l, int r)
{
    int m;
    if(l==r){arb[nod]=x;return;}
    m=(l+r)/2;
    if(pos<=m)upd(nod*2,pos,x,l,m);
    else upd(nod*2+1,pos,x,m+1,r);
    arb[nod]=max(arb[nod*2],arb[nod*2+1]);
}
void query(int nod, int a, int b, int l, int r)
{
    if(a<=l&&b>=r){maxx=max(maxx,arb[nod]);return;}
    int m=(l+r)/2;
    if(a<=m)query(nod*2,a,b,l,m);
    if(b>m)query(nod*2+1,a,b,m+1,r);
}
int main()
{
    f>>n>>m;
    for(int i=1;i<=n;i++)
    {
        f>>a;
        upd(1,i,a,1,n);
    }
    for(;m;m--)
    {
        f>>a>>b>>c;
        if(!a)
        {
            maxx=0;
            query(1,b,c,1,n);
            g<<maxx<<'\n';
        }
        else upd(1,b,c,1,n);
    }
    return 0;
}