Cod sursa(job #1921743)

Utilizator raduzxstefanescu radu raduzx Data 10 martie 2017 14:04:40
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.21 kb
#include <fstream>

using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
#define nmax 100010
int ab[4*nmax];
int v[nmax],inc,sf,val,maxim,ind;
void update(int poz,int st,int dr)
{
    if(st==dr)
    {
        ab[poz]=val;
    }
    else
    {
        int mij=(st+dr)/2;
        if(ind<=mij)
            update(poz*2,st,mij);
        if(mij+1<=ind)
            update(poz*2+1,mij+1,dr);
        ab[poz]=max(ab[poz*2],ab[poz*2+1]);
    }
}
void querry(int poz,int st,int dr)
{
    if(inc<=st and dr<=sf)
    {
        maxim=max(maxim,ab[poz]);
    }
    else
    {
        int mij=(st+dr)/2;
        if(inc<=mij)
            querry(poz*2,st,mij);
        if(sf>=mij+1)
            querry(poz*2+1,mij+1,dr);
    }
}
int main()
{
    int n,m,i,x,tip;
    f>>n>>m;
    for(i=1;i<=n;i++)
    {
        f>>x;
        val=x;
        ind=i;
        update(1,1,n);
    }
    for(i=1;i<=m;i++)
    {
        f>>tip>>inc>>sf;
        if(tip==1)
        {
            val=sf;
            ind=inc;
            update(1,1,n);
        }
        else
        {
            maxim=-1;
            querry(1,1,n);
            g<<maxim<<'\n';
        }
    }
    return 0;
}