Cod sursa(job #2089492)

Utilizator daniela12Sandu Daniela Teodora daniela12 Data 16 decembrie 2017 17:01:11
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.22 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int v[500050], n, m,poz, maxim;
void update(int l, int r, int nod,int poz, int val)
{
    if(l==r)
    {   v[nod]=val;
        return;
    }
    int mid=(l+r)/2;
    if(poz<=mid)
        update(l, mid, 2*nod, poz, val);
    else
        update(mid+1,r, 2*nod+1, poz, val);
    v[nod]=max(v[2*nod], v[2*nod+1]);
}
void query(int nod, int l, int r, int st, int dr)
{
    if(st<=l && r<=dr)
    {
        if(maxim<v[nod])    maxim=v[nod];
        return;
    }
    int mid=(l+r)/2;
    if(st<=mid)
        query(2*nod, l, mid, st, dr);
    if(mid<dr)
        query(2*nod+1, mid+1, r, st, dr);
}
void citire ()
{
    f>>n>>m;
    int i,x;
    for(i=1;i<=n;++i)
    {
        f>>x;
        update(1,n, 1,i,x);
    }
}
int main()
{   citire();
    int op,a, b;
    while(m--)
    {
        f>>op>>a>>b;
        if(op==0)

            {
                maxim=-1;
                query(1,1,n,a,b);
                g<<maxim<<'\n';
            }
        else

            {
                poz=a;
                update(1, n, 1, a, b);
            }
    }
    f.close();
    g.close();
}